#include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define pi 3.14159265
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define pb(i) push_back(i)
#define ppb(x) pop_back(x)
#define inf 0x3f3f3f3f
#define maxn 100005
int n,m,t;
ll sum[maxn<<],add[maxn<<];
void pushup(int rt)//上拉
{
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void build(int l,int r,int rt)
{
if(l==r)
{
scanf("%lld",&sum[rt]);
return ;
}
int mid=l+r>>;
build(lson);
build(rson);
pushup(rt);//上拉,维护区间和
}
void pushdown(int rt,int ln,int rn)//lazy tag下推
{
if(add[rt])
{
add[rt<<]+=add[rt];//+=表示该段原先可能就有没有下推的lazy tag
add[rt<<|]+=add[rt]; sum[rt<<]+=add[rt]*ln;//一旦lazy tag加到这段区间上就代表区间的sum是准确更新过的
sum[rt<<|]+=add[rt]*rn;
add[rt]=;//lazytag完成转移
}
}
void update(int l,int r,int rt,int L,int R,ll C)
{
if(L<=l&&r<=R)
{
add[rt]+=C;//tag到达之处维护的值也相对应的更新
sum[rt]+=C*(r-l+);
return;
}
int mid=l+r>>;
//在更新子结点之前下推标记,保证更新直到最终结点之前的结点lazytag全部下推
pushdown(rt,mid-l+,r-mid);
if(L<=mid) update(lson,L,R,C);
if(R>mid) update(rson,L,R,C);
pushup(rt);//更新完子节点之后在更新父节点整个update才结束
}
ll query(int l,int r,int rt,int L,int R)
{
if(L<=l&&r<=R)
{
return sum[rt];
}
int mid=l+r>>;
pushdown(rt,mid-l+,r-mid);
ll ans=;
if(L<=mid) ans+=query(lson,L,R);
if(R>mid) ans+=query(rson,L,R);
return ans;
}
int main()
{
//freopen("P3372_2.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
scan(n);scan(m);
build(,n,);
int flag,l,r;
ll k;
while(m--)
{
scan(flag);
if(flag==)
{
scanf("%d%d%lld",&l,&r,&k);
update(,n,,l,r,k);
}
else if(flag==)
{
scan(l);scan(r);
pf("%lld\n",query(,n,,l,r));
}
}
}

最新文章

  1. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium
  2. java注解(Annotation)解析
  3. 如何在android的mk文件添加依赖已经编译好的库
  4. 使用WebRTC实现电脑与手机通过浏览器进行视频通话
  5. c++STL之sort排序
  6. frontend http 前端名字定义问题
  7. 常用的Maven依赖
  8. 使用JavaScript和D3.js实现数据可视化
  9. Qt自定义控件系列(一) --- 圆形进度条
  10. 回头来学习wpf的FlowDocument
  11. HTML5拍照、摄像机功能实战
  12. textarea高度自适应自动展开
  13. js获取url协议、url, 端口号等信息路由信息
  14. Django后端项目---- rest framework(3)
  15. 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况
  16. Navi.Soft31.代码生成器(含下载地址)
  17. Django的模板语言介绍
  18. php执行外部命令
  19. 洛谷P3203 [HNOI2010] 弹飞绵羊 [LCT]
  20. springMVC返回modelmap跟new hashMap的区别

热门文章

  1. 使用Xshell进行vi编辑时,按下end、home和Delete不能使用,解决解决办法
  2. 360若真入股HTC 到底是谁来拯救谁
  3. kafka&amp;&amp;kafka-manager部署安装
  4. 广州CVTE招聘-测试开发工程师
  5. redis集群配置及python操作
  6. 【C#】WechatPay-API-v3 使用平台证书加密内容与应答|通知验签(SHA256 with RSA)
  7. py基础之模块与包
  8. 学习使用Guava Cache
  9. 数据挖掘入门系列教程(二)之分类问题OneR算法
  10. Lambda 语法