题目:https://www.luogu.org/problemnew/show/P1083

听说线段树不标记永久化会T一个点。

注意mn记录的是本层以下、带上标记的min!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+,INF=1e9+;
int n,m,a[N],L,R,w,tot,ls[N<<],rs[N<<],mn[N<<],laz[N<<];
bool flag;
int rdn()
{
int ret=;char ch=getchar();
while(ch>''||ch<'')ch=getchar();
while(ch>=''&&ch<='')(ret*=)+=ch-'',ch=getchar();
return ret;
}
void pshp(int cr)
{
mn[cr]=min(mn[ls[cr]],mn[rs[cr]])-laz[cr];//-laz[cr]!!
}
void build(int l,int r,int cr)
{
mn[cr]=INF;
if(l==r){mn[cr]=a[l];return;}
int mid=l+r>>;
ls[cr]=++tot;build(l,mid,ls[cr]);
rs[cr]=++tot;build(mid+,r,rs[cr]);
pshp(cr);
}
void mdfy(int l,int r,int cr,int lj)
{
if(l>=L&&r<=R)
{laz[cr]+=w;mn[cr]-=w;return;}
int mid=l+r>>;
if(L<=mid)mdfy(l,mid,ls[cr],lj+laz[cr]);
if(mid<R)mdfy(mid+,r,rs[cr],lj+laz[cr]);
pshp(cr);
}
int main()
{
n=rdn();m=rdn();
for(int i=;i<=n;i++)a[i]=rdn();
tot=;build(,n,);int i;
for(i=;i<=m;i++)
{
w=rdn();L=rdn();R=rdn();
mdfy(,n,,);
if(mn[]<)break;
}
if(i==m+)printf("0\n");
else printf("-1\n%d\n",i);
return ;
}

然而用每次遍历一下整个数组的二分答案也能做到nlogn。

注意不要把c[ ]弄成真的差分,再弄一个yc[ ]每次memcpy,不然比线段树还慢。如果把减弄成加,每次memset成0,就能快很多。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+;
int n,m,a[N],c[N],l[N],r[N],d[N];
bool pan(int k)
{
memset(c,,sizeof c);
for(int i=;i<=k;i++)c[l[i]]+=d[i],c[r[i]+]-=d[i];
for(int i=,sum=;i<=n;i++)
{
sum+=c[i];
if(sum>a[i])return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=m;i++)scanf("%d%d%d",&d[i],&l[i],&r[i]);
int l=,r=m,ans=;
while(l<=r)
{
int mid=l+r>>;
if(pan(mid))ans=mid,r=mid-;
else l=mid+;
}
if(!ans)printf("0\n");
else printf("-1\n%d\n",ans);
return ;
}

洛谷 1083 (NOIp2012) 借教室——标记永久化线段树 / 差分+二分的更多相关文章

  1. 【NOIP2012】【CJOJ1093】【洛谷1083】借教室

    我写的是不完美算法!!! 题面 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的 ...

  2. 洛谷.3437.[POI2006]TET-Tetris 3D(二维线段树)

    题目链接 下落一个d*s的方块,则要在这个平面区域找一个最高的h' 更新整个平面区域的值为h+h' 对于本题,维护最大高度h和all 对于平面的x轴维护一棵线段树t1,每个t1的节点维护对应y轴的两棵 ...

  3. 洛谷P3437 [POI2006]TET-Tetris 3D(二维线段树 标记永久化)

    题意 题目链接 Sol 二维线段树空间复杂度是多少啊qwqqq 为啥这题全网空间都是\(n^2\)还有人硬要说是\(nlog^2n\)呀.. 对于这题来说,因为有修改操作,我们需要在外层线段树上也打标 ...

  4. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  5. 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    题意 题目链接 Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是\([len_{fa_{x}} + 1 ...

  6. Bzoj1018/洛谷P4246 [SHOI2008]堵塞的交通(线段树分治+并查集)

    题面 Bzoj 洛谷 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治. 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内 ...

  7. 【洛谷4219】[BJOI2014]大融合(线段树分治)

    题目: 洛谷4219 分析: 很明显,查询的是删掉某条边后两端点所在连通块大小的乘积. 有加边和删边,想到LCT.但是我不会用LCT查连通块大小啊.果断弃了 有加边和删边,还跟连通性有关,于是开始yy ...

  8. 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)

    题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...

  9. 洛谷P1253 [yLOI2018] 扶苏的问题 (线段树)

    一道用来练习打标记的好题. 对于区间加和区间赋值两个操作分别用两个标记,分析如何打标记并下传标记(还是比较好分析的). 坑点:查询操作时,我一开始把ans设为-0x3f3f3f3f(调试了好久才发现) ...

随机推荐

  1. C#Image和Icon的相互转化

    Image img = Image.FromHbitmap(icon.ToBitmap().GetHbitmap()); Graphics g = Graphics.FromImage(img); g ...

  2. Java基础(业务问题)

    幂等的处理方式 一.查询与删除操作是天然幂等 二.唯一索引,防止新增脏数据 三.token机制,防止页面重复提交 四.悲观锁  for update 五.乐观锁(通过版本号/时间戳实现, 通过条件限制 ...

  3. 2019-8-31-dotnet-启动-JIT-多核心编译提升启动性能

    title author date CreateTime categories dotnet 启动 JIT 多核心编译提升启动性能 lindexi 2019-08-31 16:55:58 +0800 ...

  4. python configparser模块详解

    此模块提供了一个实现基本配置语言的类 首先来看一个非常基本的配置文件,如下所示格式: [DEFAULT] ServerAliveInterval = 45 Compression = yes Comp ...

  5. 高德地图定位不到 报错 location Error, ErrCode:7, errInfo:KEY错误 请到http://lbs.amap.com/api/android-location-sdk/abouterrorcode/查看错误码说明.

    出现该问题的可能是高德地图的配置不准确: 仔细配对一下 看sha1 是否是通过应用签名生成的  要区分发布版的sha1 跟调试版的sha1  是不相同的 (小编我第一次反这种错误的时候 是因为我把高得 ...

  6. jQuery3动画+创建元素

    一.jQuery的动画 1.jQuery自带的动画 1>变化的是width height opacity display <!DOCTYPE html> <html lang= ...

  7. Ionic 发送Http post PHP 获取不到数据

    1.app.js 配置请求设置 $httpProvider.defaults.headers.post={ 'Content-Type':'application/x-www-form-urlenco ...

  8. Hadoop集群中有哪些节点类型

  9. Django之ORM多表操作

    1.创建一对多: 1.外键建在多的一方(如:一个出版社可出版多本书,所以建在书的表) 2.创建表: 1.创建外键 2.关联的表名 2.一对多数据的操作 2.1数据的添加: 第一种方法: 第二种方法: ...

  10. 教你用webpack搭一个vue脚手架[超详细讲解和注释!](转载)

    1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...