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

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

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

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

#include<cstdio>
#include<algorithm>
#define N 1050000
typedef 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

BZOJ4293 : [PA2015]Siano相关推荐

  1. bzoj 4293: [PA2015]Siano(线段树)

    4293: [PA2015]Siano Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 452  Solved: 159 [Submit][Statu ...

  2. 【PA2015】【BZOJ4293】Siano

    Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m ...

  3. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  4. BZOJ4293 Siano

    题头: 描述 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米. Byteasar一共会进行m次收割,其 ...

  5. BZOJ 4291: [PA2015]Kieszonkowe 水题

    4291: [PA2015]Kieszonkowe Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  6. BZOJ4292 : [PA2015]Równanie

    注意到f(n)不会超过1459,于是暴力枚举f(n),检验n=k*f(n)是否合法即可. #include<cstdio> long long k,a,b,t;int i,j,ans; i ...

  7. P5579-[PA2015]Siano【线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/P5579 题目大意 nnn个树,第iii个每天长高aia_iai​米. mmm次修剪,第iii次在did_idi​天 ...

  8. 【BZOJ】4292: [PA2015]Równanie

    题解 \(f(n)\)的取值范围最多\(9^2 * 18\) 直接枚举判断就好 代码 #include <bits/stdc++.h> #define fi first #define s ...

  9. 【bzoj4292】 [PA2015]Równanie 乱搞

    嗯嗯,看到题果断数位dp. 然而可以乱搞一下,枚举f(n),然后直接判断k*f(n)的f是不是f(n)不就好了吗? #include<cstdio> #include<cstring ...

  10. 【PA2015】【BZOJ4296】Mistrzostwa

    Description 给定一张n个点m条边的无向图,请找到一个点数最多的点集S,满足: 1.对于点集中任何一个点,它至少与d个点集中的点相邻. 2.仅保留点集中的点后,剩下的图连通. Input 第 ...

最新文章

  1. 【组队学习】【29期】5. 李宏毅机器学习(含深度学习)
  2. 多媒体广告的底线在哪里
  3. 详细分析 apache httpd 反向代理的用法
  4. camx模型_【推荐】基于CAMx的空气质量模拟及污染来源解析技术
  5. C++ Opengl 显示列表源码
  6. 杀死初创科技公司的四大工程陷阱
  7. Lyft的TypeScript实践
  8. map平均准确率_第五篇 目标检测评价标准—MAP
  9. 7-6 动物 (15 分)
  10. Windows10下鼠标跳屏问题——Microsoft Serial Ballpoint
  11. mysql命令常用参数实例讲解
  12. Oracle导出表数据客户端,使用PLSQL批量导出、导入表的数据(精简版的Oracle客户端亦可)...
  13. 界面开发用qt还是java,做windows界面,用QT还是MFC?
  14. 百度智能云金融安全计算平台有多强?安排!
  15. 推荐两套大型医院信息管理系统,代码完整,免费分享
  16. Xshell5突然连不上虚拟机
  17. 证明酉矩阵的特征值模为1
  18. caxa计算机绘图工程师,CAXA计算机绘图
  19. python拦截广告弹窗_Python Selenium关闭弹出广告。风
  20. 软件测试工程师 岗位分析

热门文章

  1. vue ref 绑定的事件需要移除吗_vue生命周期
  2. 抖音高贵气质的签名_笑言 | 非主流时期的QQ签名和杜蕾斯文案有的一拼。
  3. 【POJ3608】Bridge Across Islands(旋转卡壳求两凸多边形的最短间距)
  4. POJ 2406题解kmp算法的应用
  5. 翻译:机器学习 数据科学家 top 10 十大算法
  6. php Excel报表,Excel报表生成的方案 PHPExcel
  7. android 代码操作.db demo,Android实现商品展示效果
  8. Crashing Balloon ZOJ1003
  9. 146.LRU缓存机制
  10. python2.7换行输出多个变量