记录编号 600101 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 数列操作C 最终得分 100
用户昵称 Gravatar会挽弯弓满月 是否通过 通过
代码语言 C++ 运行时间 3.204 s
提交时间 2025-04-15 20:53:51 内存使用 7.63 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
ll n,m;
ll a[N];
ll sum[N*4],tag[N*4];
void build(ll p,ll l,ll r){
	if(l==r){
		sum[p]=a[l];
		return ;
	}
	ll mid=(l+r)/2;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
	sum[p]=sum[p*2]+sum[p*2+1];
	return;
}
void xc(ll p,ll l,ll r){
	if(tag[p]==0) return;
	ll mid=(l+r)>>1;
	sum[p*2]+=tag[p]*(mid-l+1);
	sum[p*2+1]+=tag[p]*(r-mid);
	tag[p*2]+=tag[p];
	tag[p*2+1]+=tag[p];
	tag[p]=0;
}
void insert(ll p,ll l,ll r,ll l1,ll r1,ll d){
	if(l==l1&&r==r1){
		sum[p]+=d*(r-l+1);
		tag[p]+=d;
		return ;
	}
	ll mid=(l+r)/2;
	xc(p,l,r);
	if(r1<=mid) insert(p*2,l,mid,l1,r1,d);
	else if(l1>mid) insert(p*2+1,mid+1,r,l1,r1,d);
	else{
		insert(p*2,l,mid,l1,mid,d);
		insert(p*2+1,mid+1,r,mid+1,r1,d);
	}
	sum[p]=sum[p*2]+sum[p*2+1];
	return;
}
ll query(ll p,ll l,ll r,ll l1,ll r1){
	if(l==l1&&r==r1) return sum[p];
	xc(p,l,r);
	ll mid=(l+r)>>1;
	if(r1<=mid) return query(p*2,l,mid,l1,r1);
	else if(l1>mid) return query(p*2+1,mid+1,r,l1,r1);
	ll res=0;
	res+=query(p*2,l,mid,l1,mid);
	res+=query(p*2+1,mid+1,r,mid+1,r1);
	return res;
}
int main(){
	freopen("shuliec.in","r",stdin);
	freopen("shuliec.out","w",stdout);
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	build(1,1,n);
	scanf("%lld",&m);
	string s;
	ll a1,a2,a3;
	for(int i=1;i<=m;i++){
		cin>>s;
		if(s=="ADD"){
			scanf("%lld%lld%lld",&a1,&a2,&a3);
			insert(1,1,n,a1,a2,a3);
		}
		else{
			scanf("%lld%lld",&a1,&a2);
			ll ans=query(1,1,n,a1,a2);
			printf("%lld\n",ans);
		}
	}
	return 0;
}