看到区间整除操作,直觉是不会除太多次就变成全 \(1\)。

然而现在还有加操作。

我也不知道为什么,当一个节点的 \(\lfloor\frac{mx}{d}\rfloor=\lfloor\frac{mn}{d}\rfloor\) 的时候变成区间赋值,否则继续递归复杂度是错的,但是 \(\lfloor\frac{mx}{d}\rfloor-mx=\lfloor\frac{mn}{d}\rfloor-mn\) 变成区间加复杂度就对了???

下面两个都用上了。

(求证明复杂度……)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=400040;
  5. #define ls o<<1
  6. #define rs o<<1|1
  7. #define lson ls,l,mid
  8. #define rson rs,mid+1,r
  9. #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
  10. #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
  11. #define MEM(x,v) memset(x,v,sizeof(x))
  12. inline int read(){
  13. int x=0,f=0;char ch=getchar();
  14. while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();
  15. while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
  16. return f?-x:x;
  17. }
  18. int n,q,a[maxn];
  19. ll sum[maxn],add[maxn],cov[maxn],mx[maxn],mn[maxn];
  20. inline void pushup(int o){
  21. sum[o]=sum[ls]+sum[rs];
  22. mx[o]=max(mx[ls],mx[rs]);
  23. mn[o]=min(mn[ls],mn[rs]);
  24. }
  25. inline void setadd(int o,int l,int r,ll v){
  26. sum[o]+=(r-l+1)*v;
  27. mx[o]+=v;
  28. mn[o]+=v;
  29. add[o]+=v;
  30. }
  31. inline void setcov(int o,int l,int r,ll v){
  32. sum[o]=(r-l+1)*v;
  33. mx[o]=mn[o]=cov[o]=v;
  34. add[o]=0;
  35. }
  36. inline void pushdown(int o,int l,int r){
  37. int mid=(l+r)>>1;
  38. if(cov[o]!=1e18){
  39. setcov(lson,cov[o]);
  40. setcov(rson,cov[o]);
  41. cov[o]=1e18;
  42. }
  43. if(add[o]){
  44. setadd(lson,add[o]);
  45. setadd(rson,add[o]);
  46. add[o]=0;
  47. }
  48. }
  49. void build(int o,int l,int r){
  50. cov[o]=1e18;
  51. if(l==r) return void(mx[o]=mn[o]=sum[o]=a[l]);
  52. int mid=(l+r)>>1;
  53. build(lson);build(rson);
  54. pushup(o);
  55. }
  56. void update_add(int o,int l,int r,int ql,int qr,int v){
  57. if(l>=ql && r<=qr) return setadd(o,l,r,v);
  58. int mid=(l+r)>>1;
  59. pushdown(o,l,r);
  60. if(mid>=ql) update_add(lson,ql,qr,v);
  61. if(mid<qr) update_add(rson,ql,qr,v);
  62. pushup(o);
  63. }
  64. inline ll ddiv(ll x,ll y){
  65. if(x>=0) return x/y;
  66. else return -((-x+y-1)/y);
  67. }
  68. void update_div(int o,int l,int r,int ql,int qr,int v){
  69. if(l>=ql && r<=qr){
  70. if(ddiv(mx[o],v)==ddiv(mn[o],v)) return setcov(o,l,r,ddiv(mx[o],v));
  71. if(ddiv(mx[o],v)-mx[o]==ddiv(mn[o],v)-mn[o]) return setadd(o,l,r,ddiv(mx[o],v)-mx[o]);
  72. }
  73. int mid=(l+r)>>1;
  74. pushdown(o,l,r);
  75. if(mid>=ql) update_div(lson,ql,qr,v);
  76. if(mid<qr) update_div(rson,ql,qr,v);
  77. pushup(o);
  78. }
  79. ll query_sum(int o,int l,int r,int ql,int qr){
  80. if(l>=ql && r<=qr) return sum[o];
  81. int mid=(l+r)>>1;
  82. pushdown(o,l,r);
  83. if(mid<ql) return query_sum(rson,ql,qr);
  84. if(mid>=qr) return query_sum(lson,ql,qr);
  85. return query_sum(lson,ql,qr)+query_sum(rson,ql,qr);
  86. }
  87. ll query_min(int o,int l,int r,int ql,int qr){
  88. if(l>=ql && r<=qr) return mn[o];
  89. int mid=(l+r)>>1;
  90. pushdown(o,l,r);
  91. if(mid<ql) return query_min(rson,ql,qr);
  92. if(mid>=qr) return query_min(lson,ql,qr);
  93. return min(query_min(lson,ql,qr),query_min(rson,ql,qr));
  94. }
  95. int main(){
  96. n=read();q=read();
  97. FOR(i,1,n) a[i]=read();
  98. build(1,1,n);
  99. while(q--){
  100. int op=read(),l=read()+1,r=read()+1;
  101. if(op==1) update_add(1,1,n,l,r,read());
  102. if(op==2) update_div(1,1,n,l,r,read());
  103. if(op==3) printf("%lld\n",query_min(1,1,n,l,r));
  104. if(op==4) printf("%lld\n",query_sum(1,1,n,l,r));
  105. }
  106. }

LOJ6029 [雅礼集训2017]市场的更多相关文章

  1. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

  2. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  3. LOJ_6045_「雅礼集训 2017 Day8」价 _最小割

    LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...

  4. 「雅礼集训 2017 Day7」事情的相似度

    「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...

  5. 「雅礼集训 2017 Day2」解题报告

    「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...

  6. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  7. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

  8. 【LYOI 212】「雅礼集训 2017 Day8」价(二分匹配+最大权闭合子图)

    「雅礼集训 2017 Day8」价 内存限制: 512 MiB时间限制: 1000 ms 输入文件: z.in输出文件: z.out   [分析] 蛤?一开始看错题了,但是也没有改,因为不会做. 一开 ...

  9. loj #6046. 「雅礼集训 2017 Day8」爷

    #6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 …… 在第 63 回战车道全国高中生大赛中,军神西住美穗带领 ...

随机推荐

  1. PAT 1002 A+B for Polynomials(map模拟)

    This time, you are supposed to find A+B where A and B are two polynomials(多项式). Input Each input fil ...

  2. 盘点10个CAD难点,看看有没有让你崩溃的,解决方法一并奉上

    蜀道难,难于上青天”,对于很多学习CAD的小伙伴来说CAD就跟蜀道一样,太难了,下面小编分享几个在学习CAD过程中会遇到的问题以及解决的方法,一起来看看吧! 1. 如何替换找不到的原文字体? 答:复制 ...

  3. Windows下 gcc/g++的安装与配置

    引言 我们知道开发最好用Mac/Linux,效率很高,但是对于很多还是Windows用户的我们来说,编写代码再到linux上运行也是很常有的事情,但对于我们写一些小demo使用上面的流程难免有点兴师动 ...

  4. Vue笔记--通过自定义指令实现按钮操作权限

    经常做中后台系统,此类系统的权限是比较重要,拿自己做过的一些项目做个笔记. Vue实现的中后台管理系统.按钮操作权限的空置一般都是通过自定义指令Vue.directive. <el-button ...

  5. 在Dynamics CRM中自定义一个通用的查看编辑注释页面

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复162或者20151016可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释在CRM中的显示是比较特别, ...

  6. MD5 加密工具类MD5Util

    我们在使用MD5 在线加密的时候,会发现下面情况,大小写的区别就不说啦,那么16位和32位有啥区别呢,其实16 位实际上是从 32 位字符串中,取中间的第 9 位到第 24 位的部分,就是str.su ...

  7. Android native进程间通信实例-binder篇之——解决实际问题inputreader内建类清楚缓存

    我在实际开发中,遇到一个问题,在电容屏驱动中没有发送input_sync 给上层,导致电容屏有的数据缓存在inputreader 中,会导致系统一系列奇怪问题发生, 至于为什么驱动不发送input_s ...

  8. NSURLSession中的downloadTask的使用

    1.用downloadTask下载图片 优点:简单 缺点:不能监听下载的进度 代码示例: NSURL *url = [NSURL URLWithString:@"http://pic1.wi ...

  9. PHP代码篇(二)-- array_column函数将二维数组格式化成固定格式的一维数组,及优化查询方法

    小白因为经常用到多表查询,比如获取一个会员领取的卡卷list,里面当然包含了1“会员优惠券记录表t_coupon_members”主表,然后2“门店优惠券表t_coupon”,和3“门店信息表t_sh ...

  10. BayaiM__ oracle函数_01

    BayaiM__ oracle函数_01   Oracle函数--------------------------------------------------------------------- ...