模板

 #include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<math.h>
//#include<bitset>
//#include<iostream>
using namespace std; int n,m,q;
#define maxn 100011
#define maxm 361
#define LL long long
const LL inf=1e18;
LL a[maxn],add[maxm],be[maxm],sum[maxm],Max[maxm],Min[maxm]; bool hasbe[maxm];
int bel[maxn],tot; void down(int x)
{
int l=(x-)*m+,r=min(x*m,n);
for (int i=l;i<=r;i++)
{
if (add[x]) a[i]+=add[x];
else if (hasbe[x]) a[i]=be[x];
}
add[x]=hasbe[x]=;
}
void up(int x)
{
int l=(x-)*m+,r=min(x*m,n);
sum[x]=; Max[x]=-inf; Min[x]=inf;
for (int i=l;i<=r;i++)
sum[x]+=a[i],Max[x]=max(Max[x],a[i]),Min[x]=min(Min[x],a[i]);
}
void Addsingle(int x,int y,int v)
{
down(bel[x]);
for (int i=x;i<=y;i++) a[i]+=v;
up(bel[x]);
}
void Add(int x,int y,int v)
{
if (bel[x]==bel[y]) Addsingle(x,y,v);
else
{
int j;
for (j=x;bel[j]==bel[x];j++);
Addsingle(x,j-,v);
for (j=y;bel[j]==bel[y];j--);
Addsingle(j+,y,v);
for (int i=bel[x]+;i<bel[y];i++)
{
if (hasbe[i]) be[i]+=v;
else add[i]+=v;
sum[i]+=1ll*m*v;
Max[i]+=v; Min[i]+=v;
}
}
}
void Besingle(int x,int y,int v)
{
down(bel[x]);
for (int i=x;i<=y;i++) a[i]=v;
up(bel[x]);
}
void Be(int x,int y,int v)
{
if (bel[x]==bel[y]) Besingle(x,y,v);
else
{
int j;
for (j=x;bel[j]==bel[x];j++);
Besingle(x,j-,v);
for (j=y;bel[j]==bel[y];j--);
Besingle(j+,y,v);
for (int i=bel[x]+;i<bel[y];i++)
{
if (add[i]) add[i]=;
hasbe[i]=; be[i]=v;
sum[i]=1ll*m*v;
Max[i]=Min[i]=v;
}
}
}
LL qsumsingle(int x,int y)
{
LL ans=;
for (int i=x;i<=y;i++)
{
if (hasbe[bel[i]]) ans+=be[bel[i]];
else ans+=a[i]+add[bel[i]];
}
return ans;
}
LL qsum(int x,int y)
{
if (bel[x]==bel[y]) return qsumsingle(x,y);
else
{
int j;
for (j=x;bel[j]==bel[x];j++);
LL ans=qsumsingle(x,j-);
for (j=y;bel[j]==bel[y];j--);
ans+=qsumsingle(j+,y);
for (int i=bel[x]+;i<bel[y];i++) ans+=sum[i];
return ans;
}
}
LL qmaxsingle(int x,int y)
{
LL ans=-inf;
for (int i=x;i<=y;i++)
{
if (hasbe[bel[i]]) ans=max(ans,be[bel[i]]);
else ans=max(ans,a[i]+add[bel[i]]);
}
return ans;
}
LL qmax(int x,int y)
{
if (bel[x]==bel[y]) return qmaxsingle(x,y);
else
{
int j;
for (j=x;bel[j]==bel[x];j++);
LL ans=qmaxsingle(x,j-);
for (j=y;bel[j]==bel[y];j--);
ans=max(ans,qmaxsingle(j+,y));
for (int i=bel[x]+;i<bel[y];i++) ans=max(ans,Max[i]);
return ans;
}
}
LL qminsingle(int x,int y)
{
LL ans=inf;
for (int i=x;i<=y;i++)
{
if (hasbe[bel[i]]) ans=min(ans,be[bel[i]]);
else ans=min(ans,a[i]+add[bel[i]]);
}
return ans;
}
LL qmin(int x,int y)
{
if (bel[x]==bel[y]) return qminsingle(x,y);
else
{
int j;
for (j=x;bel[j]==bel[x];j++);
LL ans=qminsingle(x,j-);
for (j=y;bel[j]==bel[y];j--);
ans=min(ans,qminsingle(j+,y));
for (int i=bel[x]+;i<bel[y];i++) ans=min(ans,Min[i]);
return ans;
}
}
int main()
{
scanf("%d%d",&n,&q);
m=(int)sqrt(n);
for (int i=;i<=n;i++) bel[i]=(i-)/m+;
tot=bel[n];
for (int i=;i<=tot;i++) Max[i]=-inf,Min[i]=inf;
for (int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
sum[bel[i]]+=a[i];
Max[bel[i]]=max(Max[bel[i]],a[i]);
Min[bel[i]]=min(Min[bel[i]],a[i]);
} char c[];int x,y,z;
while (q--)
{
scanf("%s%d%d",c,&x,&y);
if (c[]=='a') scanf("%d",&z),Add(x,y,z);
else if (c[]=='e') scanf("%d",&z),Be(x,y,z);
else if (c[]=='u') printf("%lld\n",qsum(x,y));
else if (c[]=='a') printf("%lld\n",qmax(x,y));
else printf("%lld\n",qmin(x,y));
}
return ;
}

最新文章

  1. android 查看当前正在运行的进程
  2. Web应用安全之文件上传漏洞详解
  3. U3D中IOS平台泛型方法尽少使用
  4. 正确使用 Volatile 变量——Brian Goetz
  5. Windows Azure&#174; 由世纪互联运营发布MySQL Database on Azure正式商用版
  6. 数据导出到Excel中
  7. Visual Studio下Qt编程中对中文的处理
  8. shiro不重启动态加载权限
  9. eclipse在mac上的快捷键
  10. 『TensorFlow』SSD源码学习_其七:损失函数
  11. c# 获取文件本身的哈希值
  12. GlusterFS分布式存储系统中更换故障Brick的操作记录
  13. MYSQL CASCADE DELETE 引发的思考
  14. Codeforces 675E Trains and Statistic - 线段树 - 动态规划
  15. Appium环境安装
  16. sencha touch 在线实战培训 第一期 第四节
  17. python入门第0篇 Windows下python的安装及pip安装和使用
  18. Centos 7 GCC 7.3编译器安装方法及C++17标准测试示例
  19. Notepad++的json 格式化
  20. Groovy学习()起步

热门文章

  1. linux 定义变量 ,添加变量值
  2. [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator
  3. HTML基础2——综合案例2——复杂的嵌套列表
  4. [转]ASP.NET MVC中实现多个按钮提交的几种方法
  5. npm err报错解决
  6. JavaScript(十四)经典的Ajax
  7. dede手机端首页点击文章内容、列表,却跳到pc端
  8. jdbc 实现分页
  9. 北大ACM(POJ1020-Anniversary Cake)
  10. canvas一周一练 -- canvas绘制马尾图案 (5)