题意

给定一个环,每个节点有一个所属国家,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. Elasticsearch之四种查询类型和搜索原理(博主推荐)

    Elasticsearch Client发送搜索请求,某个索引库,一般默认是5个分片(shard). 它返回的时候,由各个分片汇总结果回来. 官网API https://www.elastic.co/ ...

  2. 【英雄会】微软题目:几个bing

    今天是元旦,开篇先祝福大家在新的一年心想事成,工作顺利,开心生活每一天 . 看到[英雄会]上出现了微软出的题目:几个bing,题目内容如下: 本届大赛由微软必应词典冠名,必应词典(Bing Dicti ...

  3. SQL 中多个 and or 的组合运算

    sql关系型运算符优先级高到低为:not >and> or AND.OR运算符的组合使用 在WHERE子句中,通过AND.OR运算符可以同时连接多个条件,当然AND.OR运算符也可以同时使 ...

  4. hiho1509 异或排序

    题目链接 题目大意: 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < ...

  5. POJ 2976 Dropping tests【二分 最大化平均值】

    题意:定义最大平均分为 (a1+a2+a3+---+an)/(b1+b2+---+bn),求任意去除k场考试的最大平均成绩 和挑战程序设计上面的最大化平均值的例子一样 判断是否存在x满足条件 (a1+ ...

  6. Synchronization (computer science)

    过程同步.数据同步. In computer science, synchronization refers to one of two distinct but related concepts: ...

  7. 预测一下web前端未来的6个趋势

    2018年前端技术的发展也将进入到一个相对稳定的阶段, 就前端主流技术框架的发展而言,过去的几年里发展极快,在填补原有技术框架空白和不足的同时也渐渐趋于成熟. 未来前端在已经趋向成熟的技术方向上面将会 ...

  8. 异步线程编程,线程池,线程组,后面涉及ThreadLocal在理解

    join模拟订单 package com.future.demo.future; /** * * * @author Administrator * */ public class NormalThr ...

  9. Ncomputering 安装及参数设置

    1.加域 2.添加用户:系统属性---远程

  10. xampp、phpstudy安装phalcon

    1.下载扩展 https://github.com/phalcon/cphalcon/releases/tag/v3.4.1选择PHP对应版本的phalcon扩展 2.PHP.ini 配置phalco ...