/*
区间修改,区间查询和;
第一次使用lazy思想;
poj3468
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
typedef struct
{
int l,r;
ll add;
ll value;
}V; int n,m,a[]={}; V tr[]={};
void Pushup(int rt)
{
tr[rt].value=tr[rt<<].value+tr[(rt<<)|].value;
}
void Pushdown(int rt,int m)
{
if(tr[rt].add)
{
tr[rt<<].add+=tr[rt].add;
tr[(rt<<)|].add+=tr[rt].add;
tr[rt<<].value+=tr[rt].add*(m-(m>>));
tr[(rt<<)|].value+=tr[rt].add*(m>>);
tr[rt].add=;
}
}
void build(int i,int l,int r)
{
tr[i].l=l;
tr[i].r=r;
tr[i].add=;
if(l==r)
{
tr[i].value=a[l];
return ;
}
int mid=(l+r)/;
build(i<<,l,mid);
build((i<<)|,mid+,r);
Pushup(i);
}
void Update(int i,int l,int r,int x)
{
if(tr[i].l==l&&tr[i].r==r)
{
tr[i].add+=x;
tr[i].value+=(ll)x*(r-l+);
return ;
}
if(tr[i].l==tr[i].r)
return ;
Pushdown(i,tr[i].r-tr[i].l+);
int t=i<<;
if(l<=tr[t].r)
{
if(r<=tr[t].r)
Update(t,l,r,x);
else
Update(t,l,tr[t].r,x);
}
t+=;
if(r>=tr[t].l)
{
if(l>=tr[t].l)
Update(t,l,r,x);
else
Update(t,tr[t].l,r,x);
}
Pushup(i);
}
ll Query(int i,int l,int r)
{
if(tr[i].l==l&&tr[i].r==r)
{
return tr[i].value;
}
Pushdown(i,tr[i].r-tr[i].l+);
ll ans=;
i=i<<;
if(l<=tr[i].r)
{
if(r<=tr[i].r)
ans+=Query(i,l,r);
else
ans+=Query(i,l,tr[i].r);
}
i+=;
if(r>=tr[i].l)
{
if(l>=tr[i].l)
ans+=Query(i,l,r);
else
ans+=Query(i,tr[i].l,r);
}
return ans;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,,sizeof(a));
memset(tr,,sizeof(tr));
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
build(,,n);
for(int i=;i<m;i++)
{
char s[];
int x1,x2,x3;
scanf("%s",s);
if(s[]=='C')
{
scanf("%d%d%d",&x1,&x2,&x3);
Update(,x1,x2,x3);
}
else
{
scanf("%d%d",&x1,&x2);
printf("%I64d\n",Query(,x1,x2));
}
}
}
return ;
}

最新文章

  1. Oracle数据库的 增、删、改、查
  2. NSString方法与NSMutableString方法
  3. 实现跨云应用——基于DNS的负载均衡
  4. phpexcel生成excel并下载
  5. Flume 实战(1) -- 初体验
  6. ecshop的Mysql操作类
  7. [LeetCode]题解(python):039-Combination Sum
  8. daatable动态创建
  9. HDU2699+Easy
  10. oc对象互相引用内存释放解决方案
  11. 配置日志logwarch 每天发送到邮箱
  12. Echarts后台封装option对象
  13. [Swift]LeetCode989. 数组形式的整数加法 | Add to Array-Form of Integer
  14. Scoop及使用
  15. loadrunner录制的时候如何应对验证码的问题解决办法?
  16. 查看mysql执行的线程,并杀掉他
  17. 建议使用nginx配合uwsgi,
  18. 图像处理之CSC色彩转换
  19. ajax操作的链式写法
  20. swing版网络爬虫-丑牛迷你采集器2.0

热门文章

  1. 机器学习&amp;深度学习资料分享
  2. 2018.4.1 Ubuntu16.04 下配置Tomcat服务器以及设置dingshi启动
  3. Android layout的XML
  4. 修改Windows默认调试器
  5. PAT (Basic Level) Practise (中文)- 1008. 数组元素循环右移问题 (20)
  6. java基础—抽象类介绍
  7. python从列表中删除相邻重复元素
  8. 09GNU C语言程序编译
  9. python入门:while循环里面True和False的作用,真和假
  10. 无需上传附件到服务器,Servlet读取Excel(二)