[BZOJ2527] [Poi2011]Meteors(整体二分)
对于单个国家,可以对答案进行二分,每次找出此时的陨石数量,如果大于需要的那么答案就在[l,mid],否则就在[mid+1,r]里面
而对于很多国家,也可以进行二分,solve(l,r,L,R)表示询问id[l...r]的答案都在[L,R]之间
每次用树状数组统计一下
Code
#include <cstdio>
#include <algorithm>
#define lowbit(x) ((x)&(-x))
#define N 300010
#define ll long long
using namespace std; struct edge{int to,nex;}e[N*2];
struct que{int x,y,z;}q[N];
const int Inf=1e9;
int n,m,k,tot,head[N],A[N],id[N],Ans[N],tmp,tmp2[N];
ll T[N]; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} inline void Link(int u,int v){
e[++tot].to=v;e[tot].nex=head[u];head[u]=tot;
} ll query(int x){
ll res=0;
for(;x;x-=lowbit(x)) res+=T[x];
return res;
} void add(int x,int v){
for(;x<=m;x+=lowbit(x)) T[x]+=v;
} void opera(int k,int f){
add(q[k].x,f*q[k].z),add(q[k].y+1,f*q[k].z*(-1));
if(q[k].x>q[k].y) add(1,f*q[k].z);
} bool mk[N];
inline void solve(int l,int r,int L,int R){
if(l>r) return;
if(L==R){
for(int i=l;i<=r;++i) Ans[id[i]]=L;
return;
}
int mid=(L+R)>>1;
for(;tmp<=mid;) opera(++tmp,1);
for(;tmp>mid;) opera(tmp--,-1);
int cnt=0,u;ll tot;
for(int i=l;i<=r;++i){
tot=0,u=id[i];
for(int j=head[u];j;j=e[j].nex){
int v=e[j].to;
tot+=query(v);
if(tot>=A[u]) break;
}
if(tot>=A[u]) mk[u]=1,cnt++;
else mk[u]=0;
}
int l1=l,l2=l+cnt;
for(int i=l;i<=r;++i)
if(mk[id[i]]) tmp2[l1++]=id[i];
else tmp2[l2++]=id[i];
for(int i=l;i<=r;++i) id[i]=tmp2[i];
solve(l,l1-1,L,mid);
solve(l1,l2-1,mid+1,R);
} int main(){
n=read(),m=read();
for(int i=1,x;i<=m;++i) x=read(),Link(x,i);
for(int i=1;i<=n;A[i++]=read());
k=read();
for(int i=1;i<=k;++i) q[i].x=read(),q[i].y=read(),q[i].z=read();
q[++k].x=1,q[k].y=m,q[k].z=Inf;
for(int i=1;i<=n;++i) id[i]=i;
solve(1,n,1,k);
for(int i=1;i<=n;++i) (Ans[i]<k)?printf("%d\n",Ans[i]):puts("NIE");
return 0;
}
[BZOJ2527] [Poi2011]Meteors(整体二分)的更多相关文章
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...
- BZOJ2527: [Poi2011]Meteors(整体二分)
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- 【BZOJ2527】[Poi2011]Meteors 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组
题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...
- [bzoj2527][Poi2011]Meteors_整体二分_树状数组
Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- 2527: [Poi2011]Meteors[整体二分]
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ...
- bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...
- Luogu3527 POI2011 Meteors 整体二分、树状数组、差分
传送门 比较板子的整体二分题目,时限有点紧注意常数 整体二分的过程中将时间在\([l,mid]\)之间的流星使用树状数组+差分进行维护,然后对所有国家查看一遍并分好类,递归下去,记得消除答案在\([m ...
随机推荐
- AngularJS表单验证开发案例
angular支持IE8+浏览器,虽然性能很好,但是目前只适用于手机端项目 知识点:域$scopeAngularJS基础指令指令实现不同的功能学习思路和方法 <link rel="st ...
- MotionEvent的getX(),getY()与getRawX(),getRawY()区别
在Android的View中getX getRawX获取的坐标是不一样的,只是相对比照的对象不一样而已. 1.在View中: getX()是表示Widget相对于自身左上角的x坐标,而getRawX ...
- java中空字符串、null的区别
String 的null,或者赋值为"",有什么区别? 废话少说,上代码: public class EmptyAndNull { /** * @param args */ pub ...
- vos套餐设置
为实现对客户不同时段按不同费率计算,可以在vos里设置套餐, 具体案例: 1. 2.时段费率 套餐里没包含的时间段是不能打电话的 即:周一到周五 21:30—24:00 00:00- ...
- 《转化:提升网站流量和转化率的技巧》:结合市场营销六阶段理论,以SEM为手段,提高网站转化率的技巧
全书结合市场营销的六阶段理论,讲述各阶段的营销方面的要点和网站上吸引访客的技巧.举了一些例子,列举了一些工具.当然都是美国市场中的例子和网站优化的工具. 没有太多的新意.没看过相关图书的可以看看.
- java 网络流 TCP/UDP
一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...
- Django Field lookups (字段查找)
字段查找是指定SQL WHERE子句的核心内容的方式. 它们被指定为QuerySet方法filter().exclude()和get()的关键字参数. 1.exact:精确查找.如果为比较提供的值为N ...
- ArcGIS License Server Administrator 10.2 无法启动许可的解决办法
刚刚重装了电脑,安装ArcGIS的时候,安装完desktop之后又安装了License Manager,结果把破解文件替换完之后,发现ArcGIS License Server Administrat ...
- 使用dao时,如何同时使用动态表名和过滤字段?
使用dao时,如何同时使用动态表名和过滤字段? 发布于 630天前 作者 wukonggg 316 次浏览 复制 上一个帖子 下一个帖子 标签: 无 如题.求样例代码 1 回复 wend ...
- java 通过接口在后台管理器中生成数据
需求:测试人员在后台批量添加数据很麻烦,特别是针对一款商品配置了英语,还需要手动添加法语.俄语.阿拉伯语,很麻烦,但是因为没有项目组配合,做个小工具批量生成数据就只有自己去研究了 第一步:通过抓包工具 ...