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了一发 最 ...
随机推荐
- stateful openflow------整理openstate原理以及具体应用
openstate基本思想就是控制器下放一部分功能,交换机不再是简单的dumb,而是保留一些简单的wise. 论文中以端口锁定为例,提出了米粒型状态机在交换机内部的应用从而可以大大减少交换机和控制器之 ...
- SQL Server查询已锁的表及解锁
--查询已锁的表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName ,* from ...
- 怎样利用好单片机上的存储器资源来实现OD的存储与访问
转自:http://www.cnblogs.com/winshton/p/4897789.html 我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的 ...
- 深入理解JAVA集合系列二:ConcurrentHashMap源码解读
HashMap和Hashtable的区别 在正式开始这篇文章的主题之前,我们先来比较下HashMap和Hashtable之间的差异点: 1.Hashtable是线程安全的,它对外提供的所有方法都是都使 ...
- 微信小程序wx:for和wx:for-item的正确用法
wx:for="{{list}}"用来循环数组,而list即为数组名wx:for-item="items" 即用来定义一个循环过程中每个元素的变量的 如果是一维 ...
- 如何选择mysql存储引擎
一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...
- js & Object reference bug
js & Object reference bug bug object ref bug onClickButton (type = ``) { let { publishDate: publ ...
- Codeforces 1060 F. Shrinking Tree
题目链接 一道思维好题啊...感觉这种类型的题很检验基本功是否扎实(像我这样的就挂了). 题意:你有一棵\(n\)个点的树,每次随机选择一条边,将这条边的两个端点合并,并随机继承两个点标号中的一个,问 ...
- unix常用命令记录
1. ls 命令:列出文件及文件夹 ls -a 列出目录下的所有文件,包括以 . 开头的隐含文件.ls -b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.ls -c 输 ...
- BZOJ3244 NOI2013树的计数(概率期望)
容易发现的一点是如果确定了每一层有哪些点,树的形态就确定了.问题变为划分bfs序. 考虑怎样划分是合法的.同一层的点在bfs序中出现顺序与dfs序中相同.对于dfs序中相邻两点依次设为x和y,y至多在 ...