模板

  1 #include<stdio.h>
  2 #include<algorithm>
  3 #include<string.h>
  4 #include<stdlib.h>
  5 #include<math.h>
  6 //#include<bitset>
  7 //#include<iostream>
  8 using namespace std;
  9
 10 int n,m,q;
 11 #define maxn 100011
 12 #define maxm 361
 13 #define LL long long
 14 const LL inf=1e18;
 15 LL a[maxn],add[maxm],be[maxm],sum[maxm],Max[maxm],Min[maxm]; bool hasbe[maxm];
 16 int bel[maxn],tot;
 17
 18 void down(int x)
 19 {
 20     int l=(x-1)*m+1,r=min(x*m,n);
 21     for (int i=l;i<=r;i++)
 22     {
 23         if (add[x]) a[i]+=add[x];
 24         else if (hasbe[x]) a[i]=be[x];
 25     }
 26     add[x]=hasbe[x]=0;
 27 }
 28 void up(int x)
 29 {
 30     int l=(x-1)*m+1,r=min(x*m,n);
 31     sum[x]=0; Max[x]=-inf; Min[x]=inf;
 32     for (int i=l;i<=r;i++)
 33         sum[x]+=a[i],Max[x]=max(Max[x],a[i]),Min[x]=min(Min[x],a[i]);
 34 }
 35 void Addsingle(int x,int y,int v)
 36 {
 37     down(bel[x]);
 38     for (int i=x;i<=y;i++) a[i]+=v;
 39     up(bel[x]);
 40 }
 41 void Add(int x,int y,int v)
 42 {
 43     if (bel[x]==bel[y]) Addsingle(x,y,v);
 44     else
 45     {
 46         int j;
 47         for (j=x;bel[j]==bel[x];j++);
 48         Addsingle(x,j-1,v);
 49         for (j=y;bel[j]==bel[y];j--);
 50         Addsingle(j+1,y,v);
 51         for (int i=bel[x]+1;i<bel[y];i++)
 52         {
 53             if (hasbe[i]) be[i]+=v;
 54             else add[i]+=v;
 55             sum[i]+=1ll*m*v;
 56             Max[i]+=v; Min[i]+=v;
 57         }
 58     }
 59 }
 60 void Besingle(int x,int y,int v)
 61 {
 62     down(bel[x]);
 63     for (int i=x;i<=y;i++) a[i]=v;
 64     up(bel[x]);
 65 }
 66 void Be(int x,int y,int v)
 67 {
 68     if (bel[x]==bel[y]) Besingle(x,y,v);
 69     else
 70     {
 71         int j;
 72         for (j=x;bel[j]==bel[x];j++);
 73         Besingle(x,j-1,v);
 74         for (j=y;bel[j]==bel[y];j--);
 75         Besingle(j+1,y,v);
 76         for (int i=bel[x]+1;i<bel[y];i++)
 77         {
 78             if (add[i]) add[i]=0;
 79             hasbe[i]=1; be[i]=v;
 80             sum[i]=1ll*m*v;
 81             Max[i]=Min[i]=v;
 82         }
 83     }
 84 }
 85 LL qsumsingle(int x,int y)
 86 {
 87     LL ans=0;
 88     for (int i=x;i<=y;i++)
 89     {
 90         if (hasbe[bel[i]]) ans+=be[bel[i]];
 91         else ans+=a[i]+add[bel[i]];
 92     }
 93     return ans;
 94 }
 95 LL qsum(int x,int y)
 96 {
 97     if (bel[x]==bel[y]) return qsumsingle(x,y);
 98     else
 99     {
100         int j;
101         for (j=x;bel[j]==bel[x];j++);
102         LL ans=qsumsingle(x,j-1);
103         for (j=y;bel[j]==bel[y];j--);
104         ans+=qsumsingle(j+1,y);
105         for (int i=bel[x]+1;i<bel[y];i++) ans+=sum[i];
106         return ans;
107     }
108 }
109 LL qmaxsingle(int x,int y)
110 {
111     LL ans=-inf;
112     for (int i=x;i<=y;i++)
113     {
114         if (hasbe[bel[i]]) ans=max(ans,be[bel[i]]);
115         else ans=max(ans,a[i]+add[bel[i]]);
116     }
117     return ans;
118 }
119 LL qmax(int x,int y)
120 {
121     if (bel[x]==bel[y]) return qmaxsingle(x,y);
122     else
123     {
124         int j;
125         for (j=x;bel[j]==bel[x];j++);
126         LL ans=qmaxsingle(x,j-1);
127         for (j=y;bel[j]==bel[y];j--);
128         ans=max(ans,qmaxsingle(j+1,y));
129         for (int i=bel[x]+1;i<bel[y];i++) ans=max(ans,Max[i]);
130         return ans;
131     }
132 }
133 LL qminsingle(int x,int y)
134 {
135     LL ans=inf;
136     for (int i=x;i<=y;i++)
137     {
138         if (hasbe[bel[i]]) ans=min(ans,be[bel[i]]);
139         else ans=min(ans,a[i]+add[bel[i]]);
140     }
141     return ans;
142 }
143 LL qmin(int x,int y)
144 {
145     if (bel[x]==bel[y]) return qminsingle(x,y);
146     else
147     {
148         int j;
149         for (j=x;bel[j]==bel[x];j++);
150         LL ans=qminsingle(x,j-1);
151         for (j=y;bel[j]==bel[y];j--);
152         ans=min(ans,qminsingle(j+1,y));
153         for (int i=bel[x]+1;i<bel[y];i++) ans=min(ans,Min[i]);
154         return ans;
155     }
156 }
157 int main()
158 {
159     scanf("%d%d",&n,&q);
160     m=(int)sqrt(n);
161     for (int i=1;i<=n;i++) bel[i]=(i-1)/m+1;
162     tot=bel[n];
163     for (int i=1;i<=tot;i++) Max[i]=-inf,Min[i]=inf;
164     for (int i=1;i<=n;i++)
165     {
166         scanf("%lld",&a[i]);
167         sum[bel[i]]+=a[i];
168         Max[bel[i]]=max(Max[bel[i]],a[i]);
169         Min[bel[i]]=min(Min[bel[i]],a[i]);
170     }
171
172     char c[10];int x,y,z;
173     while (q--)
174     {
175         scanf("%s%d%d",c,&x,&y);
176         if (c[0]=='a') scanf("%d",&z),Add(x,y,z);
177         else if (c[1]=='e') scanf("%d",&z),Be(x,y,z);
178         else if (c[1]=='u') printf("%lld\n",qsum(x,y));
179         else if (c[1]=='a') printf("%lld\n",qmax(x,y));
180         else printf("%lld\n",qmin(x,y));
181     }
182     return 0;
183 }

View Code

转载于:https://www.cnblogs.com/Blue233333/p/8034325.html

分块试水--CODEVS4927 线段树练习5相关推荐

  1. 分块试水--CODEVS5037 线段树练习4加强版

    感觉这才算入门题吧..前面那些线段树练习,改几个字符就过了一定要搞成几道题.. n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数. 这题空间? ...

  2. 51NOD 1287 加农炮(不水的线段树)

    >>点击进入原题测试<< Input示例 9 11 1 2 0 4 3 2 1 5 7 2 8 0 7 6 5 3 4 5 6 5 Output示例 2 2 2 4 3 3 5 ...

  3. NEFU 1266 快乐的雨季 (线段树)

    题意: 中文 思路: 线段树基础题当然亦可以分块做 代码: 线段树: #include <bits/stdc++.h> using namespace std; #define ls l, ...

  4. 【线段树】2019雅礼集训 sequence

    题目: 给出k,和一个长度为n的序列A 有q次询问, 每次询问Al,Al+1,Al+2--,ArA_l,A_{l+1},A_{l+2}--,A_{r}Al​,Al+1​,Al+2​--,Ar​中,有多 ...

  5. 1355 巧克力 (线段树点+区间)

    继续最水的线段树  简单粗暴 #include<cstdio> #include<cstring> #include<algorithm> #define lc p ...

  6. 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))

    A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0   4^5^6^7=0 #include<bits/std ...

  7. LibreOJ 6277,6278,6280 数列分块入门1,2,4 树状数组,分块,线段树等.

    分块1 分块2 分块4 模板一共有九个.我试着在三天内做了3个. 应该不用超链接吧. 分块1 区间加,单点询问. 这不是裸的改版树状数组吗?用树状数组处理前缀和水过. #include<bits ...

  8. 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)

    樱桃莓莓 题目链接:YBT2023寒假Day4 C 题目大意 有一个黑盒操作满足交换律和结合律,有 n 个数,q 次询问,每次选 m 个下标,你要计算所有不包含那 m 个下标的数进行黑盒操作之后的结果 ...

  9. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671 向大(hei)佬(e)势力学(di ...

最新文章

  1. 架构师之路 — 数据库设计 — 关系型数据库的外键约束与关联
  2. vuex实践之路——笔记本应用(三)
  3. 现在c++都转go了
  4. Spring AOP用法
  5. 利用Octave解线性方程组
  6. opensplice dds v6.3.2_给你看个宝贝,近乎完美的DDS正弦波信号音生成器
  7. UE4 调试着色器编译过程
  8. 数据结构树的基本操作_数据结构二叉树的基本操作~~~~
  9. php 模板 自定义函数调用,thinkphp模板中使用自定义函数
  10. Java完全参考手册_Java完全参考手册(第8版) ((美)Herbert Schildt) pdf扫描版
  11. html5兼容QQ浏览器,【QQ浏览器5.1】发布 HTML5兼容性测试
  12. PS2有线手柄的SPI协议
  13. ElementUI Cascader 级联选择器实现点击文本选中
  14. windows c语言编程环境,windows7中c语言编程环境的搭建
  15. node.js版本不同,跑不起项目(个人笔记)
  16. 启动mongo数据库
  17. 2021-11-09小程序的开发制作的价格是多少?
  18. 整流二极管的作用是什么?
  19. MACD策略引入backtrader出错
  20. / Vijos FBI树 递归

热门文章

  1. 初中学历在辽宁学计算机,在辽宁省实验中学学习是怎样一番体验?
  2. oracle最快访问行,Oracle技术网—在Oracle快速进行数据行存在性检查
  3. android 获取monkey日志_安卓app测试之Monkey日志分析
  4. openglshader实现虚拟场景_虚拟演播室设计原则
  5. 算法训练 数的划分 动态规划
  6. apache license 2.0如何使用防止法律纠纷_Thinkphp + queue 使用队列进行 邮件通知
  7. Java 解析URL
  8. C/C++ 文件的后缀名
  9. cmd中Redis的启动
  10. MATLAB教程(1) MATLAB 基础知识(3)