题目大意:略

洛谷传送门

整体二分裸题

考虑只有一个国家的情况如何处理

对询问数量二分答案,暴力$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 (整体二分+树状数组)的更多相关文章

  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. bzoj 2527 Meteors - 整体二分 - 树状数组

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

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

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

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

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

  6. bzoj 2738: 矩阵乘法【整体二分+树状数组】

    脑子一抽开始写主席树,敲了一会发现不对-- 整体二分,用二维树状数组维护值为当前区间的格子个数,然后根据k的大小和当前询问的子矩阵里的值和k的大小关系来决定这个询问放在哪一部分向下递归 #includ ...

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

    题意 给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值 题解 一个一个国家算会T.这题要用整体二分.我 ...

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

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

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

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

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

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

随机推荐

  1. 洛谷——P1616 疯狂的采药

    https://www.luogu.org/problem/show?pid=1616#sub 题目背景 此题为NOIP2005普及组第三题的疯狂版. 题目描述 LiYuxiang是个天资聪颖的孩子, ...

  2. 洛谷 P1649 [USACO07OCT]障碍路线Obstacle Course

    P1649 [USACO07OCT]障碍路线Obstacle Course 题目描述 Consider an N x N (1 <= N <= 100) square field comp ...

  3. scala并发编程原生线程Actor、Case Class下的消息传递和偏函数实战

    參考代码: import scala.actors._ case class Person(name:String,age:Int) class HelloActor extends Actor{ d ...

  4. Database Design for Sexbale Forum

    Mars March 17, 2015

  5. xcode打包测试

    模拟器的内存cpu网络,都是电脑的.xcode可以查看. Xcode7之前是限制人,限制电脑,限制app,限制真机调试的. Xcode7之后,做真机测试只需要apple id即可,会自动生成证书. X ...

  6. 略过天涯 深入浅出VGA和DVI接口【转】

    本文转载自:http://www.cnblogs.com/lueguo/p/3373649.html 由CrazyBingo修改…… 前言:目前显示器的主流接口是VGA.DVI以及HDMI,再加上一个 ...

  7. 让git for windows记住密码

    store 执行这个命令git config --global credential.helper store 检查命令是否成功 $ git config -l | grep credentialcr ...

  8. 淘宝CDN系统架构

         存储与架构分论坛上,淘宝网技术委员会主席,淘宝网核心工程师章文嵩向我们详细介绍了淘宝网图片处理与存储系统的架构.章文嵩博士的演 讲日程包括了 淘宝的整个系统架构.淘宝图片存储系统架构,淘宝网 ...

  9. Java攻城狮之基础练习题------经典例题

    (一)键盘录入1----7,分别于控制台输出对应的周一,周二,周三,周四,周五,周六,周天. (二)设置一个数组,求出数组中对应的最大值以及索引. (三)在控制台输出9x9乘法口诀表. (四)使用冒泡 ...

  10. [原创]一道基本ACM试题的启示——多个测试用例的输入问题。

    Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数 ...