BZOJ 2527 [Poi2011]Meteors(整体二分)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2527
【题目大意】
有N个成员国。现在它发现了一颗新的星球,
这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站。
这个星球经常会下陨石雨。BIU已经预测了接下来K场陨石雨的情况。
BIU的第i个成员国希望能够收集Pi单位的陨石样本。
你的任务是判断对于每个国家,它需要在第几次陨石雨之后,才能收集足够的陨石。
【题解】
如果枚举每场陨石雨,树状数组查询每个国家是否完成收集,复杂度O(Kmlogm),难以接受
因此我们对答案整体二分,不同位置的答案不断划分到对应的陨石时段计算。
将完成任务的国家放到左边区间,未达成的放到右边区间。复杂度O(mlogmlogK).
【代码】
- #include <cstdio>
- #include <cstring>
- #include <vector>
- using namespace std;
- const int N=300010;
- typedef long long LL;
- int x,n,m,T,K,l[N],r[N],val[N],id[N],p[N],tmp[N],ans[N],mark[N];
- LL c[N];
- vector<int> v[N];
- LL query(int x){LL s=0;while(x)s+=c[x],x-=x&-x;return s;}
- void add(int x,int val){while(x<=m)c[x]+=val,x+=x&-x;}
- void update(int x,int k){
- if(l[x]<=r[x])add(l[x],k*val[x]),add(r[x]+1,-k*val[x]);
- else{
- add(1,k*val[x]),add(r[x]+1,-k*val[x]);
- add(l[x],k*val[x]);
- }
- }
- 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;
- while(T<=mid)update(++T,1);
- while(T>mid)update(T--,-1);
- int cnt=0,x; LL tot;
- for(int i=l;i<=r;i++){
- tot=0; x=id[i];
- for(int j=0;j<v[x].size();j++){
- tot+=query(v[x][j]);
- if(tot>=p[x])break;
- }if(tot>=p[x])mark[x]=1,cnt++;
- else mark[x]=0;
- }int l1=l,l2=l+cnt;
- for(int i=l;i<=r;i++){
- if(mark[id[i]])tmp[l1++]=id[i];
- else tmp[l2++]=id[i];
- }for(int i=l;i<=r;i++)id[i]=tmp[i];
- solve(l,l1-1,L,mid);
- solve(l1,l2-1,mid+1,R);
- }
- int main(){
- while(~scanf("%d%d",&n,&m)){
- for(int i=1;i<=m;i++)scanf("%d",&x),v[x].push_back(i);
- for(int i=1;i<=n;i++)scanf("%d",&p[i]);
- scanf("%d",&K);
- for(int i=1;i<=K;i++)scanf("%d%d%d",&l[i],&r[i],&val[i]);
- l[++K]=1;r[K]=m;val[K]=0x3f3f3f3f;
- for(int i=1;i<=n;i++)id[i]=i;
- solve(1,n,1,K);
- for(int i=1;i<=n;i++){
- if(ans[i]==K)puts("NIE");
- else printf("%d\n",ans[i]);
- }
- }return 0;
- }
BZOJ 2527 [Poi2011]Meteors(整体二分)的更多相关文章
- bzoj 2527: [Poi2011]Meteors 整体二分
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...
- BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)
整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...
- 2527: [Poi2011]Meteors[整体二分]
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1528 Solved: 556 [Submit][S ...
- BZOJ.2527.[POI2011]MET-Meteors(整体二分)
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...
- BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)
题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...
- BZOJ 2527 [Poi2011]Meteors:整体二分
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...
- 【BZOJ2527】[Poi2011]Meteors 整体二分
[BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...
- BZOJ2527[Poi2011]Meteors——整体二分+树状数组
题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...
- BZOJ2527 [Poi2011]Meteors 整体二分 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...
随机推荐
- bzoj 1093 缩点+DP
首先比较明显的是如果存在一个半连通子图,我们将其中的环缩成点,那么该图仍为半连通子图,这样我们就可以先将整张图缩点,重新构图,新图为拓扑图,记录每个新的点表示的强连通分量中点的个数num[i],那么我 ...
- JVM在遇到OOM(OutOfMemoryError)时生成Dump文件
方法一: 命令:jmap -dump:format=b,file=heap.bin file:保存路径及文件名pid:进程编号(windows通过任务管理器查看,linux通过ps aux查看) du ...
- rabbitmq之队列性能测试及优化方法(六)
前言 下面关注一下rabbitmq实际使用时的性能问题和怎么进行一些优化. 性能测试 针对每个需要生产/消费者与rabbitmq进行通讯的方法进行测试 测试环境 排除网络IO的干扰,采用生产者和消费者 ...
- Opencv模块功能介绍
本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 站在巨 ...
- Linux System.map文件【转】
转自:http://blog.csdn.net/ysbj123/article/details/51233618 当运行GNU链接器gld(ld)时若使用了"-M"选项,或者使用n ...
- f1 f12热键关闭
fn+f2进入bios系统——>找到configuration——>Hotkey Mode——>enter——>选择disable——>fn+f10保存
- Network Embedding
网络表示 网络表示学习(DeepWalk,LINE,node2vec,SDNE) https://blog.csdn.net/u013527419/article/details/76017528 网 ...
- jquery文档加载几种写法,图片加载写法
jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函 ...
- Python3通过汉字输出拼音
https://github.com/mozillazg/python-pinyin # pip install pypinyin from pypinyin import pinyin, lazy_ ...
- SQLiScanner:又一款基于SQLMAP和Charles的被动SQL 注入漏洞扫描工具
https://blog.csdn.net/qq_27446553/article/details/52610095