题意

给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值

题解

一个一个国家算会T。
这题要用整体二分。我们二分mid给所有国家判断。把可以满足条件的国家放在左边,把所有不满足的国家放在右边。然后继续递归。
本题要求区间加减单点查询。所以套树状数组维护。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const long long N=;
const long long INF=1e9+;
vector<long long> belong[N];
long long c[N];
long long n,m,target[N],con[N],ls[N],rs[N],val[N],ans[N],k;
long long now,LL[N],RR[N],sum[N];
long long lowbit(long long x){
return x&-x;
}
void add(long long x,long long w){
for(long long i=x;i<=m;i+=lowbit(i)){
c[i]+=w;
}
}
long long check(long long x){
long long tmp=;
for(long long i=x;i>=;i-=lowbit(i)){
tmp+=c[i];
}
return tmp;
}
void change(long long l,long long r,long long w){
if(l<=r){
add(l,w);add(r+,-w);
}
else {
add(l,w);add(m+,-w);
add(,w);add(r+,-w);
}
}
void query(long long l,long long r,long long L,long long R){
if(l>r)return ;
if(L>R)return ;
if(l==r){
for(long long i=L;i<=R;i++){
ans[con[i]]=l;
}
return;
}
long long mid=l+r>>;
while(now<mid){
now++;
change(ls[now],rs[now],val[now]);
}
while(now>mid){
change(ls[now],rs[now],-val[now]);
now--;
}
for(long long i=L;i<=R;i++){
sum[con[i]]=;
for(long long j=;j<belong[con[i]].size();j++){
sum[con[i]]+=check(belong[con[i]][j]);
if(sum[con[i]]>target[con[i]])break;
}
}
long long rcnt=;long long lcnt=;
for(long long i=L;i<=R;i++){
if(sum[con[i]]>=target[con[i]])LL[++lcnt]=con[i];
else RR[++rcnt]=con[i];
}
for(long long i=;i<=lcnt;i++)con[i+L-]=LL[i];
for(long long i=;i<=rcnt;i++)con[i+L-+lcnt]=RR[i];
query(l,mid,L,L+lcnt-);
query(mid+,r,L+lcnt,R);
}
int main(){
scanf("%lld%lld",&n,&m);
for(long long i=;i<=m;i++){
long long a;
scanf("%lld",&a);
belong[a].push_back(i);
}
for(long long i=;i<=n;i++){
scanf("%lld",&target[i]);
con[i]=i;
}
scanf("%lld",&k);
for(long long i=;i<=k;i++){
scanf("%lld%lld%lld",&ls[i],&rs[i],&val[i]);
}
k++;
ls[k]=;rs[k]=m;val[k]=INF;
now=;
query(,k,,n);
for(long long i=;i<=n;i++){
if(ans[i]==k)printf("NIE\n");
else printf("%lld\n",ans[i]);
}
return ;
}

[POI2011]MET-Meteors(整体二分+树状数组)的更多相关文章

  1. 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组

    题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...

  2. 【BZOJ-2527】Meteors 整体二分 + 树状数组

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 306[Submit][Stat ...

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

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

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

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

  5. bzoj 2527 Meteors - 整体二分 - 树状数组

    Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby gala ...

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

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

  7. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  8. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

  9. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

随机推荐

  1. TYVJ 1541 八数码

    Orz双向搜索的cy大神 我用的是hash 也蛮快的 //By SiriusRen #include <queue> #include <cstdio> using names ...

  2. Ubuntu14.04下Mongodb官网卸载部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb官网安装部署步骤(图文详解)(博主推荐) https://docs.mongodb.com/manual/tutorial/ins ...

  3. 你不知道的JavaScript(四)数值

    JS中只有一种数值类型,即number.不管是整数还是小数都属于number类型,事实上JS并不区分小数和整数. <div> <script type="text/java ...

  4. JavaScript学习——BOM对象

    1.BOM 对象:浏览器对象模型(操作与浏览器相关的内容) 2.Window 对象 Window 对象表示浏览器中打开的窗口 setInterval():它有一个返回值,主要是提供给 clearInt ...

  5. SpringCloud学习笔记(11)----Spring Cloud Netflix之Hystrix断路器的使用

    为什么会有断路器? 在微服务架构中,系 是拆分成 一个的服务单元各间通过注册与发现 的方式互相依 赖.每个单元都在不同的进程中运行, 都是通过远程调用的方式进行信 ,这样就有可能因为网络原或 是依赖服 ...

  6. sass的用法小结(三)

    5. 混合器; 如果你的整个网站中有几处小小的样式类似(例如一致的颜色和字体),那么使用变量来统一处理这种情况是非常不错的选择.但是当你的样式变得越来越复杂,你需要大段大段的重用样式的代码,独立的变量 ...

  7. 解决vuex刷新页面数据丢失

    1.前言 vue构建的项目中,vuex的状态存储是响应式的,当vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会得到高效刷新,问题来了,vuex存储的数据只是在页 ...

  8. win10安装node/yarn报错2503/2502

    当我们从node官网下载windows安装包时会得到一个msi文件,由于win10的安全策略比较严格,所以我们在右键菜单上找不到以管理员运行这个按钮: 普通的exe文件: msi文件: 解决办法: 此 ...

  9. centos 7.1安装frees witch

    http://blog.sina.com.cn/s/blog_539d6e0c0102zgvm.html

  10. python做的 QQ未读消息图像

    #!/usr/bin/pythonfrom PIL import Image ,ImageDraw, ImageFont#打开所在的文件im=Image.open('test.jpg')#获取图片对象 ...