记录编号 535992 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 数列操作C 最终得分 100
用户昵称 GravatarDeacep 是否通过 通过
代码语言 C++ 运行时间 4.779 s
提交时间 2019-07-06 16:35:37 内存使用 22.81 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,md;
struct cmt{
	int l,r;
	long long laz;
	long long data;
}t[400005];
void Init(int rt,int ll,int rr){
	t[rt].laz=0;
	t[rt].data=0;
	t[rt].l=ll;
	t[rt].r=rr;
	if(ll==rr)return;
	int m=(ll+rr)>>1;
	Init(rt*2,ll,m);
	Init(rt*2+1,m+1,rr);
}
void cha(int rt,int L,int R,long long k){
	t[rt].data+=(R-L+1)*k;
//	cout<<rt<<' '<<t[rt].data<<endl;//记得删注释qwq 
	if(t[rt].l==L&&t[rt].r==R){
		t[rt].laz+=k;//
		return;
	}
	if(t[rt].l==t[rt].r)
	return;
	int m=(t[rt].l+t[rt].r)>>1;
	if(m>=R)
	cha(rt*2,L,R,k);
	else//不加这个else有神秘结果调了一天 qwq
	if(m<L)
	cha(rt*2+1,L,R,k);
	else{
		cha(rt*2,L,m,k);
		cha(rt*2+1,m+1,R,k);
	}
}
//long long ask(int rt,int L,int R);
/*void che(int rt,int L,int R,int k){
	t[rt].data+=ask(rt,L,R)*k;
	if(L==t[rt].l&&R==t[rt].r){
		t[rt].laz*=k;
		t[rt].data*=k;
		return;
	}
	if(t[rt].l==t[rt].r)return;
	int m=(t[rt].l+t[rt].r)>>1;
	if(R<=m)
	che(rt*2,L,R,k);
	if(L>m)
	che(rt*2+1,L,R,k);
	else{
		che(rt*2,L,m,k);
		che(rt*2+1,m+1,R,k);
	}
}*/
void kill_lz(int rt){
	int m=(t[rt].l+t[rt].r)>>1;
	cha(rt*2,t[rt].l,m,t[rt].laz);
	cha(rt*2+1,m+1,t[rt].r,t[rt].laz);
	t[rt].laz=0;
}
long long ask(int rt,int L,int R){
	if(t[rt].l==L&&t[rt].r==R)
	return t[rt].data;
	int m=(t[rt].l+t[rt].r)>>1;
	if(t[rt].laz)
	kill_lz(rt);
	if(m>=R)
	return ask(rt*2,L,R);
	if(L>m)
	return ask(rt*2+1,L,R);
	return ask(rt*2,L,m)+ask(rt*2+1,m+1,R);
}
int main(){
	freopen("shuliec.in","r",stdin);
	freopen("shuliec.out","w",stdout);
	int m;
	cin>>n;//>>m>>md;
	Init(1,1,n);
	int q;
	for(int i=1;i<=n;i++){
		cin>>q;
		cha(1,i,i,q);
	}
	int u,v;
	string exc;
	cin>>m;
	while(m--){
		cin>>exc>>u>>v;
/*		if(exc==""){
			int k;
			cin>>k;
			che(1,u,v,k);
		}*/
		if(exc=="ADD"){
			long long k;
			cin>>k;
			cha(1,u,v,k);
		}
		if(exc=="SUM")
		cout<<ask(1,u,v);//%md;
	}
	return 0;
}