记录编号 575572 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 数列操作C 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 C++ 运行时间 5.100 s
提交时间 2022-09-21 20:45:44 内存使用 10.47 MiB
显示代码纯文本
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n,m,sq,x,y,k,j;
ll belong[100010],sum[100010],a[100010],l[100010],r[100010],mark[100010];
string opt;
int size(int x){
	return r[x]-l[x]+1;
}
int main(){
	freopen("shuliec.in","r",stdin);
	freopen("shuliec.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	sq=ceil(sqrt(n));
	for(int i=1;i<=n;i++){
		cin>>a[i];
		belong[i]=i/sq;
		sum[belong[i]]+=a[i];
	}
	for(int i=1;i<=n;i++){
		if(!l[belong[i]]){
			l[belong[i]]=i;
		}
	}
	for(int i=n;i;i--){
		if(!r[belong[i]]){
			r[belong[i]]=i;
		}
	}
	cin>>m;
	while(m--){
		cin>>opt;
		if(opt[0]=='A'){
			cin>>x>>y>>k;
			for(j=x;j<=y;j++){
				if(l[belong[j]]==j){
					break;
				}
				a[j]+=k;
				sum[belong[j]]+=k;
			}
			for(;j<=y;j+=size(belong[j])){
				if(r[belong[j]]>y){
					break;
				}
				sum[belong[j]]+=k*size(belong[j]);
				mark[belong[j]]+=k;
			}
			for(;j<=y;j++){
				a[j]+=k;
				sum[belong[j]]+=k;
			}
		}
		else{
			cin>>x>>y;
			ll ans=0;
			for(j=x;j<=y;j++){
				if(l[belong[j]]==j){
					break;
				}
				ans+=a[j]+mark[belong[j]];
			}
			for(;j<=y;j+=size(belong[j])){
				if(r[belong[j]]>y){
					break;
				}
				ans+=sum[belong[j]];
			}
			for(;j<=y;j++){
				ans+=a[j]+mark[belong[j]];
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}