BZOJ2527: [Poi2011]Meteors(整体二分)
Description
这个星球经常会下陨石雨。BIU已经预测了接下来K场陨石雨的情况。
BIU的第i个成员国希望能够收集Pi单位的陨石样本。你的任务是判断对于每个国家,它需要在第几次陨石雨之后,才能收集足够的陨石。
输入:
第一行是两个数N,M。
第二行有M个数,第i个数Oi表示第i段轨道上有第Oi个国家的太空站。
第三行有N个数,第i个数Pi表示第i个国家希望收集的陨石数量。
第四行有一个数K,表示BIU预测了接下来的K场陨石雨。
接下来K行,每行有三个数Li,Ri,Ai,表示第K场陨石雨的发生地点在从Li顺时针到Ri的区间中(如果Li<=Ri,就是Li,Li+1,...,Ri,否则就是Ri,Ri+1,...,m-1,m,1,...,Li),向区间中的每个太空站提供Ai单位的陨石样本。
输出:
N行。第i行的数Wi表示第i个国家在第Wi波陨石雨之后能够收集到足够的陨石样本。如果到第K波结束后仍然收集不到,输出NIE。
数据范围:
Input
Output
Sample Input
1 3 2 1 3
10 5 7
3
4 2 4
1 3 1
3 5 2
Sample Output
NIE
1
解题思路:
整体二分非常好的入门题。
整体二分就是最大化利用二分答案的空隙。
将询问分类,将midcheck后合法的统一右移左指针。
相当于递归栈中实现了棵树。
仔细想想也不无道理,建线段树时一起构建更加省时,这是一个道理,相当于更新环境来检查答案。
这道题就是将mid次陨石全部降下形成一个环境,合法则推入下一个环境。
代码:
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
typedef long long lnt;
const int N=;
struct object{
int no;
lnt target;
std::vector<int>inp;
}o[N],sp[N],ss[N];
struct matter{
int l;
int r;
lnt val;
}is[N];
int n,m;
int cnt;
int top;
int ans[N];
int blg[N];
lnt line[N];
int lowbit(int x){return x&(-x);}
void update(int pos,lnt v){while(pos<=m){line[pos]+=v;pos+=lowbit(pos);}return ;}
lnt query(int pos){lnt ans=;while(pos){ans+=line[pos];pos-=lowbit(pos);}return ans;}
void occur(int dir,int which)
{
dir=dir*is[which].val;
if(is[which].l<=is[which].r)
{
update(is[which].l,dir);
update(is[which].r+,-dir);
}else{
update(,dir);
update(is[which].r+,-dir);
update(is[which].l,dir);
}
return ;
}
bool check(int no)
{
lnt ret=;
lnt tar=o[no].target;
for(int i=;i<o[no].inp.size();i++)
{
ret+=query(o[no].inp[i]);
if(ret>=tar)
return true;
}
return ret>=tar;
}
void macrs(int l,int r,int ll,int rr)
{
if(ll>rr)
return ;
if(l==r)
{
for(int i=ll;i<=rr;i++)
ans[o[i].no]=l;
return ;
}
int mid=(l+r)>>;
while(top<=mid)
occur(,++top);
while(top>mid)
occur(-,top--);
int sta1=,sta2=;
for(int i=ll;i<=rr;i++)
{
if(check(i))
sp[++sta1]=o[i];
else
ss[++sta2]=o[i];
}
int sta=ll-;
int lmid;
for(int i=;i<=sta1;i++)
o[++sta]=sp[i];
lmid=sta;
for(int i=;i<=sta2;i++)
o[++sta]=ss[i];
macrs(l,mid,ll,lmid);
macrs(mid+,r,lmid+,rr);
return ;
}
int main()
{
//freopen("7.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d",&blg[i]);
o[blg[i]].inp.push_back(i);
}
for(int i=;i<=n;i++)
{
ans[i]=-;
scanf("%lld",&o[i].target);
o[i].no=i;
}
scanf("%d",&cnt);
for(int i=;i<=cnt;i++)
scanf("%d%d%lld",&is[i].l,&is[i].r,&is[i].val);
is[++cnt]=(matter){,m,0x3f3f3f3f};
macrs(,cnt,,n);
for(int i=;i<=n;i++)
if(ans[i]==-||ans[i]==cnt)
printf("NIE\n");
else
printf("%d\n",ans[i]);
return ;
}
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 整体二分
[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 ...
随机推荐
- 大数据时代的新BI系统架构发展趋势
商业智能(BI,Business Intelligence).它是一套完整的解决方式,用来将企业中现有的数据进行有效的整合,高速准确的提供报表并提出决策根据.帮助企业做出明智的业务经营决策. ...
- cocos2d-x 3.1 学习(一):工具安装与配置环境
初级学习cocos2d-x 3.1开发,学习开发过程记录到博客上面来,哪写的不正确请指点. 1.工具安装 cocos2d-x 3.1rc0 最新版本号,下载后解压.下载地址:http://www.co ...
- vue2.0-transition配合animate.css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SQL Source Control
https://documentation.red-gate.com/display/SOC5/SQL+Source+Control+5+documentation Working with migr ...
- PL/SQL Developer怎么连接远程数据库
首先打开电脑,到PL/SQL安装的指定目录 [D:\app\DZL\product\10.2.0\dbhome_1\NETWORK\ADMIN]或者[D:\oracle\product\10.2.0\ ...
- android开源项目---View篇
本文转载自:http://blog.csdn.net/likebamboo/article/details/19080739 主要介绍那些不错个性化的View,包括ListView.ActionBar ...
- php https链接
1.安装soap扩展 2.安装openssL 3.代码执行 function issure($sn){//通过soap链接接口 进行确认是否是正确的sn码 try{ $clie ...
- MySpring dataSource从配置文件获取
大神就不看了.本篇是一个人笔记. 原来的数据库配置文件是写死的. 看代码:Mybatis的配置文件 <bean id="dataSource" class="org ...
- JSON初入门
JSON:Javascript Object Notation 轻量级的数据交换格式 语法规则:(JSON语法是js对象表示语法的子集) 1.数据在名称/值对中 2.数据由逗号分隔 3.花括号{}保存 ...
- jquery08
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...