博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4293 : [PA2015]Siano
阅读量:5330 次
发布时间:2019-06-14

本文共 1786 字,大约阅读时间需要 5 分钟。

不管怎么修改,所有数字的排名都不会发生变化。

将a[]从小到大排序之后,维护一棵线段树,在上面修改。

对于收割操作,在线段树上二分,找到需要修改的后缀进行区间赋值即可。

时间复杂度$O(m\log n)$。

 

#include
#include
#define N 1050000typedef long long ll;int n,m,i,a[N/2];ll now,old,R,ans;inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}inline void read(ll&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10LL)+=c-'0';}struct P{ bool a;ll b,c; P(){a=1,b=c=0;} P(bool _a,ll _b,ll _c){a=_a,b=_b,c=_c;} P operator+(P B){return P(a&B.a,b*B.a+B.b,c*B.a+B.c);}}tag[N];struct Node{ll vl,vr,vs,s;}T[N];inline void add(int x,P p,int a,int b){ if(p.a){ T[x].vl+=p.b+p.c*::a[a]; T[x].vr+=p.b+p.c*::a[b]; T[x].vs+=p.b*(b-a+1)+p.c*T[x].s; }else{ T[x].vl=p.b+p.c*::a[a]; T[x].vr=p.b+p.c*::a[b]; T[x].vs=p.b*(b-a+1)+p.c*T[x].s; } tag[x]=tag[x]+p;}inline void pb(int x,int a,int b){ int mid=(a+b)>>1; add(x<<1,tag[x],a,mid),add(x<<1|1,tag[x],mid+1,b); tag[x]=P();}void build(int x,int a,int b){ if(a==b){T[x].s=::a[a];return;} int mid=(a+b)>>1; build(x<<1,a,mid),build(x<<1|1,mid+1,b); T[x].s=T[x<<1].s+T[x<<1|1].s;}void check(int x,int a,int b){ if(T[x].vr<=R)return; if(T[x].vl>R){ ans+=T[x].vs-R*(b-a+1); add(x,P(0,R,0),a,b); return; } pb(x,a,b); int mid=(a+b)>>1; check(x<<1,a,mid),check(x<<1|1,mid+1,b); T[x].vl=T[x<<1].vl,T[x].vr=T[x<<1|1].vr; T[x].vs=T[x<<1].vs+T[x<<1|1].vs;}int main(){ for(read(n),read(m),i=1;i<=n;i++)read(a[i]); std::sort(a+1,a+n+1); build(1,1,n); while(m--){ read(now),read(R); add(1,P(1,0,now-old),1,n); ans=0; check(1,1,n); old=now; printf("%lld\n",ans); } return 0;}

  

转载于:https://www.cnblogs.com/clrs97/p/4850109.html

你可能感兴趣的文章
EL表达式和标准标签库
查看>>
大数据学习——linux常用命令(四)
查看>>
3.3.5 高效读取:不变模式下的CopyOnWriteArrayList
查看>>
JDBC JAVA数据库插入语句
查看>>
map重写比较器
查看>>
解析xml文件的几种技术与Dom4j与sax之间的对比
查看>>
BZOJ 3210: 花神的浇花集会
查看>>
R条件筛选
查看>>
日期转周几
查看>>
Cin、Cout 加快效率方法
查看>>
GDAL Virtual Format Tutorial
查看>>
win7平台下使用MASMPlus搭建汇编环境
查看>>
oracle 可以连接数据库,vs连不上. 报错提示:ORA-12154: TNS: 无法解析指定的连接标识符...
查看>>
Trie树入门
查看>>
Java小知识点
查看>>
JS学习记录(DOM补充一)
查看>>
洛谷P3958 奶酪
查看>>
wangEditor-基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费(2)...
查看>>
SDN第一次作业
查看>>
Spark Mllib里决策树回归分析使用.rootMeanSquaredError方法计算出以RMSE来评估模型的准确率(图文详解)...
查看>>