记录编号 600111 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 数列操作C 最终得分 100
用户昵称 Gravatar李奇文 是否通过 通过
代码语言 C++ 运行时间 4.109 s
提交时间 2025-04-15 21:33:44 内存使用 4.68 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5;
int bh[N],a[N],s[N],b[N];
int n,q,len;
void qjj(int l,int r,int x){
	int ld=bh[l],rd=bh[r];
	if(ld==rd){
		for(int i=l;i<=r;i++){
			a[i]+=x;
			s[ld]+=x;
		}
	}else{
		for(int i=l;bh[i]==ld;i++){
			a[i]+=x;
			s[ld]+=x;
		}
		for(int i=ld+1;i<rd;i++){
			b[i]+=x,s[i]+=len*x; 
		}
		for(int i=r;bh[i]==rd;i--){
			a[i]+=x;
			s[rd]+=x;
		}
	}
	return;
}
int qjc(int l,int r){
	int ld=bh[l],rd=bh[r];
    long long ans=0;
    if(ld==rd){  
    	for(int i=l;i<=r;i++) ans+=a[i]+b[ld];
    	return ans;
  	}
 	for(int i=l;bh[i]==ld;i++) ans+=a[i]+b[ld];
  	for(int i=ld+1;i<rd;i++) ans+=s[i];
  	for(int i=r;bh[i]==rd;i--) ans+=a[i]+b[rd];
	return ans;
}
signed main(){
	freopen("shuliec.in","r",stdin);
	freopen("shuliec.out","w",stdout);
	std::cin>>n;
	len=sqrt(n);
	for(int i=1;i<=n;i++){
		std::cin>>a[i];
		bh[i]=(i-1)/len+1;
    	s[bh[i]]+=a[i];
	}
	std::cin>>q;
	for(int i=1;i<=q;i++){
		int x,y;
		string op;
		std::cin>>op>>x>>y;
		if(op=="SUM"){
			std::cout<<qjc(x,y)<<endl;
		}else{
			int k;
			std::cin>>k;
			qjj(x,y,k);
		}
	}
	return 0;
}