题目大意:略

洛谷传送门

整体二分裸题

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

对询问数量二分答案,暴力$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. Oracle-表更名、转存数据

    --更名 ALTER TABLE T_LOGSRV_SERVICE RENAME TO T_LOGSRV_SERVICE_20170418_BAK; --创建同样的表 ;

  2. sendfile学习

    参考 https://zhuanlan.zhihu.com/p/20768200?refer=auxten 而成本很多时候的体现就是对计算资源的消耗,其中最重要的一个资源就是CPU资源. Sendfi ...

  3. HDU 4528

    一直在纠结怎么样表示找到了人,,,开始时竟灰笨得设两个BOOL.后来参考别人的可以使用二进制位. 另外,此处有一个剪枝就是,就到达该点之后的状态的found(即找到人的状态)在之前已出现过,可以剪去. ...

  4. Android ScrollView中嵌套ListView

    由于要做一个相似美团的团购产品.scrollview中还有嵌入listview,要是直接把listview嵌进scrollview中.listview的高度是固定的不能进行滑动.默认情况下Androi ...

  5. [Cypress] Load Data from Test Fixtures in Cypress

    When creating integration tests with Cypress, we’ll often want to stub network requests that respond ...

  6. webbench压力測试工具

    apache的測试工具ab 在并发100个以上后会出现错误.网上也有非常多改ab源代码来解禁的. 只是还是推荐一款比較好用的压力測试工具webbench wget http://blog.zyan.c ...

  7. Activiti的简单入门样例(经典的请假样例)

    经典的请假样例: 流程例如以下,首先须要部门经理审批.假设请假天数大于2天,则须要总经理审批,否则HR审批就可以 一:创建maven项目,项目结构例如以下: watermark/2/text/aHR0 ...

  8. SQLServer2012 表IAM存储结构探究

    SQLServer2012 表IAM存储结构探究 Author:zfive5(zidong) Email: zfive5@163.com 引子 国庆节期间,一直在翻阅<程序猿的自我修养-链接.装 ...

  9. 国外物联网平台初探(二) ——微软Azure IoT

    平台定位 连接设备.其它 M2M 资产和人员,以便在业务和操作中更好地利用数据. 连接 IoT 设备 将所有设备连接到云,从这些设备接收大规模数据,以及管理这些设备的授权和限制. 在将设备连接到云和处 ...

  10. hdoj--2255--奔小康赚大钱(KM算法模板)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...