bzoj千题计划149:bzoj2527: [Poi2011]Meteors
http://www.lydsy.com/JudgeOnline/problem.php?id=2527
整体二分
区间加,单点查,树状数组维护差分序列
注意 累积可能会爆long long,所以一满足要求就break
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 300001 #define lowbit(x) x&-x typedef long long LL; int m,k; int tot,front[N],nxt[N],to[N]; struct node
{
bool ty;
int l,r,id;
int num,cur;
}e[N<<],tmp1[N<<],tmp2[N<<]; int need[N],ans[N]; LL have[N]; LL c[N+]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void add(int x,int y)
{
to[++tot]=y; nxt[tot]=front[x]; front[x]=tot;
} void change(int x,int y)
{
while(x<=m)
{
c[x]+=y;
x+=lowbit(x);
}
} LL query(int x)
{
LL sum=;
while(x)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
} void solve(int head,int tail,int l,int r)
{
if(head>tail) return;
if(l==r)
{
for(int i=head;i<=tail;++i)
if(!e[i].ty) ans[e[i].l]=l;
return;
}
int mid=l+r>>;
for(int i=head;i<=tail;++i)
{
if(e[i].ty && e[i].id<=mid)
{
if(e[i].l<=e[i].r)
{
change(e[i].l,e[i].num);
change(e[i].r+,-e[i].num);
}
else
{
change(e[i].l,e[i].num);
change(,e[i].num);
change(e[i].r+,-e[i].num);
}
}
else if(!e[i].ty)
{
have[e[i].l]=;
for(int j=front[e[i].l];j;j=nxt[j])
{
have[e[i].l]+=query(to[j]);
if(have[e[i].l]>=e[i].num) break;
} }
}
for(int i=head;i<=tail;++i)
{
if(e[i].ty && e[i].id<=mid)
{
if(e[i].l<=e[i].r)
{
change(e[i].l,-e[i].num);
change(e[i].r+,e[i].num);
}
else
{
change(e[i].l,-e[i].num);
change(,-e[i].num);
change(e[i].r+,e[i].num);
}
}
}
int ll=,rr=;
for(int i=head;i<=tail;++i)
{
if(!e[i].ty)
{
if(e[i].cur+have[e[i].l]>=e[i].num) tmp1[++ll]=e[i];
else
{
e[i].cur+=have[e[i].l];
tmp2[++rr]=e[i];
}
}
else
{
if(e[i].id<=mid) tmp1[++ll]=e[i];
else tmp2[++rr]=e[i];
}
}
for(int i=;i<=ll;++i) e[head+i-]=tmp1[i];
for(int i=;i<=rr;++i) e[head+ll+i-]=tmp2[i];
solve(head,head+ll-,l,mid);
solve(head+ll,tail,mid+,r);
} int main()
{
int n;
read(n); read(m);
int x,y,z;
for(int i=;i<=m;++i)
{
read(x);
add(x,i);
}
for(int i=;i<=n;++i) read(need[i]);
read(k);
for(int i=;i<=k;++i)
{
read(e[i].l);
read(e[i].r);
read(e[i].num);
e[i].ty=true;
e[i].id=i;
}
k++;
e[k].l=;
e[k].r=m;
e[k].num=1e9;
e[k].ty=true;
e[k].id=k;
for(int i=;i<=n;++i)
{
e[k+i].l=i;
e[k+i].num=need[i];
}
solve(,n+k,,k);
for(int i=;i<=n;++i)
{
if(ans[i]==k) puts("NIE");
else cout<<ans[i]<<'\n';
}
}
bzoj千题计划149:bzoj2527: [Poi2011]Meteors的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划251:bzoj3672: [Noi2014]购票
http://www.lydsy.com/JudgeOnline/problem.php?id=3672 法一:线段树维护可持久化单调队列维护凸包 斜率优化DP 设dp[i] 表示i号点到根节点的最少 ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
随机推荐
- BETA随笔6/7
前言 我们居然又冲刺了·六 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 新方案代码比之前的更简单,但是对场景的要求相应变高了,已经实现,误差感人 代码 ...
- Beta Scrum Day 6 — 听说
听说
- mybatis连接数据库的几种方式
1.可以通过配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="ht ...
- [并查集] 1107. Social Clusters (30)
1107. Social Clusters (30) When register on a social network, you are always asked to specify your h ...
- Gradle入门(6):创建Web应用项目
如果要用 Java 和 Gradle 创建一个 Web 应用项目,我们首先需要创建一个 Java 项目,下面来看看该如何去做. 创建Java项目 我们可以使用Java插件创建一个Java项目,通过添加 ...
- JavaBean 与 EJB 的区别
JavaBean在一般情况下指的是实体类,在大部分情况下和POJO是同义词,基本构成就是一些字段和与之对应的 setter.getter方法,如果一个JavaBean需要在不同的JVM的进程中进行传递 ...
- Mac 下搭建 Apache 服务器
Apache作为最流行的Web服务器端软件之一,它的优点与地位不言而喻.下面介绍下在Mac下搭建Apache服务器的步骤: (1)“前往” –>”个人” (2)在你的个人目录下新建一个文件夹,改 ...
- 10th 规格说明书练习——吉林一日游
活动规格说明书 吉林市一日游 版本:1.0 编订:王东涵 团队:2016级计算机技术全体同学 日期:2016-11-20 目录 1.引言 1.1 编写目的 1.2 背景 1.3 定义 1.4 参考资料 ...
- mysql只修改年月日,时分秒不变
比如时间为 “2014-12-11 13:12:01”修改为“2014-09-26 13:12::01”修改内容为修改yyyy-mm-dd为对应的日期,时间不变.UPDATE result_road_ ...
- MiniUI合并单元格
function onload(e){ var grid = e.sender; var len = grid.data.length; var data= grid.data; ,num=; var ...