【题目链接】 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(整体二分)的更多相关文章

  1. bzoj 2527: [Poi2011]Meteors 整体二分

    给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i] ...

  2. BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)

    整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...

  3. 2527: [Poi2011]Meteors[整体二分]

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1528  Solved: 556 [Submit][S ...

  4. BZOJ.2527.[POI2011]MET-Meteors(整体二分)

    题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...

  5. BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)

    题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...

  6. BZOJ 2527 [Poi2011]Meteors:整体二分

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2527 题意: 有n个国家和m个空间站,每个空间站都属于一个国家,一个国家可以有多个空间站, ...

  7. 【BZOJ2527】[Poi2011]Meteors 整体二分

    [BZOJ2527][Poi2011]Meteors Description Byteotian Interstellar Union (BIU) has recently discovered a ...

  8. BZOJ2527[Poi2011]Meteors——整体二分+树状数组

    题目描述 Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The ...

  9. BZOJ2527 [Poi2011]Meteors 整体二分 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686460.html 题目传送门 - BZOJ2527 题意 有$n$个国家. 太空里有$m$个太空站排成一个圆 ...

随机推荐

  1. .NET Core Data Access

    .NET Core was released a few months ago, and data access libraries for most databases, both relation ...

  2. 浅谈游戏中BUFF的设计要点

    其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时候,它就滚一边去了. 废话不多说切入正题: 游戏中的BUFF/DEBUFF我们见过很多, ...

  3. 工具_HBuilder使用快捷方式

    HBuilder常用快捷键大概共9类([4 13 3]文件.编辑.插入:[4 9 8]选择.跳转.查找:[1 1 6]运行.工具.视图) 1.文件(4) 新建 Ctrl + N 关闭 Ctrl + F ...

  4. sqlmap参数说明

    --delay 设置每隔几秒测试一次注入 --safe-url 设置sqlmap要访问的正常url --safe-freq 设置每测试多少条注入语句后才去访问safe-url --code 设置能正常 ...

  5. Java面向对象的三个特征与含义

    封装 1.英文为 encapsulation,实现信息隐藏: 2.把同一类事物的特性归纳到一个类中(属性和行为),隐藏对象的内部实现: 继承 1.英文为 inheritance: 2.继承的过程,是从 ...

  6. linux编程之多线程编程

    我们知道,进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比如实现一个图形界面的下载软件,一方面 ...

  7. python实战===一键刷屏

    #当按键q的时候,自动输入 “大家好!”并回车键发送!from pynput import keyboard from pynput.keyboard import Key, Controller k ...

  8. .net爬虫了解一下

    using System; //添加selenium的引用 using OpenQA.Selenium.PhantomJS; using OpenQA.Selenium.Chrome; using O ...

  9. .NET直接编译成本地代码:.NET Native架构简介

    原文地址:http://blog.csdn.net/atfield/article/details/23449089

  10. leetcode 之LRU Cache(26)

    很实际的一道题.定义一个双向链表list,方便插入和删除:定义一个哈希表,方便查找. 具体的,哈希表存放每个结点的key和它对应的结点的地址:访问结点时,如果结点存在,则将其交换到头部,同是更新哈希表 ...