BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)
题目大意:略
整体二分裸题
考虑只有一个国家的情况如何处理
对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$
如果有$n$个国家,就是$O(nmlogK)$,非常不优秀的时间复杂度
发现我们对于每个国家都进行一次二分很浪费时间
考虑把国家分成一定数量的集合
每次二分出一个答案$mid$
把集合内的国家按照能否满足要求分成两个集合$S1,S2$
如果能满足要求,当前询问的mid不一定是最优解,答案范围一定是$[l,mid]$
如果不能满足要求,当前$mid$不能作为答案,答案范围只能是$[mid+1,r]$
$(l,mid,S1),(mid+1,r,S2)$递归分治处理,用树状数组维护即可
时间$O((K+n)logKlogm)$
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 300100
#define ll long long
#define dd double
#define inf 233333333
using namespace std; int gint()
{
int ret=,fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
int n,m,Q,K;
struct BIT{
ll sum[N1];
void update(int x,int w){ for(int i=x;i<=m;i+=(i&(-i))) sum[i]+=w; }
ll query(int x){ ll ans=; for(int i=x;i;i-=(i&(-i))) ans+=sum[i]; return ans; }
void clr(int x){ for(int i=x;i<=m;i+=(i&(-i))) sum[i]=; }
}s;
struct node{int l,r,w;}q[N1];
vector<int>son[N1];
int que[N1*],tl,ans[N1],id[N1],tmp[N1],p[N1];
void alldic(int l,int r,int ql,int qr)
{
if(l>r||ql>qr) return;
int qmid=(ql+qr)>>,i,j,x,S=l,E=r; ll res;
for(i=ql;i<=qmid;i++)
{
if(q[i].l<=q[i].r){
s.update(q[i].l,q[i].w); s.update(q[i].r+,-q[i].w);
que[++tl]=q[i].l; que[++tl]=q[i].r+;
}else{
s.update(q[i].l,q[i].w); s.update(,q[i].w); s.update(q[i].r+,-q[i].w);
que[++tl]=; que[++tl]=q[i].l; que[++tl]=q[i].r+;
}
}
for(i=l;i<=r;i++)
{
x=id[i]; res=p[x];
for(j=;j<son[x].size();j++)
{
res-=s.query(son[x][j]);
if(res<=) { ans[x]=qmid; tmp[S++]=x; break;}
}
if(res>) { p[x]=res; tmp[E--]=x; }
}
for(i=l;i<=r;i++) id[i]=tmp[i];
while(tl) s.clr(que[tl--]);
alldic(l,S-,ql,qmid-); alldic(E+,r,qmid+,qr);
} int main()
{
scanf("%d%d",&n,&m);
int i,j,k,x,y,z;
for(i=;i<=m;i++){ x=gint(),son[x].push_back(i); }
for(i=;i<=n;i++){ p[i]=gint(); id[i]=i;}
scanf("%d",&Q);
for(i=;i<=Q;i++){ q[i].l=gint(); q[i].r=gint(); q[i].w=gint(); }
alldic(,n,,Q);
for(i=;i<=n;i++)
{
if(!ans[i]) puts("NIE");
else printf("%d\n",ans[i]);
}
return ;
}
BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)的更多相关文章
- 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组
题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- bzoj 2527 Meteors - 整体二分 - 树状数组
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...
- 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 2738: 矩阵乘法【整体二分+树状数组】
脑子一抽开始写主席树,敲了一会发现不对-- 整体二分,用二维树状数组维护值为当前区间的格子个数,然后根据k的大小和当前询问的子矩阵里的值和k的大小关系来决定这个询问放在哪一部分向下递归 #includ ...
- [POI2011]MET-Meteors(整体二分+树状数组)
题意 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值 题解 一个一个国家算会T.这题要用整体二分.我 ...
- BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)
整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...
随机推荐
- Vijos——T 1092 全排列
https://vijos.org/p/1092 描述 输入两个自然数m,n 1<=n<=20,1<=m<=n!输出n个数的第m种全排列. 如 :输入 3 1输出 1 2 3 ...
- Extensions for Spatial Data
http://dev.mysql.com/worklog/task/?spm=5176.100239.blogcont4270.8.j3asa7&id=6609 前文: 这两天因为项目原因看了 ...
- binlog
binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中: 作用:MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变 ...
- win7_64
转到YLMF DOS工具,输入ghost然后回车 enter后 选择options进入
- sikuli+eclipse实例
设置sikuli环境变量 如果在执行脚本的时候出现以下错误: Getting the VisionProxy.dll: Can not find dependent libraries... 把Sik ...
- Swift3.0中关于日期类的使用指引
日期的处理在大大小小的iOS项目中都十分常见,随着Swift3.0正式版的即将推出,语法的改变让NSDate以及相关类的使用都与之前略有不同,这里将会对基于Swift3.0版本的NSDate及相关类的 ...
- hdoj-1004-Let the Balloon Rise(水题)
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- axis2调用webservice教训
总结教训,axis2client调用WS接口时url不能加?wsdl,而用cxf调用时则要加上. 今天用axis2的RpcServerClient调用https的webservice接口,在设置完op ...
- 6.11Realm简介
CasRealm 统一认证授权中心 跟单点登录有关的.IniRealm 静态文件
- discuz “欣” “衡” 用户不能注册 bug修改
discuz “欣” “衡” 用户不能注册 原因是 discuz 有这样一段代码 function check_username($username) { $guestexp = '\xA1\xA1| ...