记录编号 375838 评测结果 WWWWWWWWWW
题目名称 数列操作C 最终得分 0
用户昵称 Gravatarzjh001 是否通过 未通过
代码语言 C++ 运行时间 0.619 s
提交时间 2017-02-25 23:29:18 内存使用 1.09 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <list>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
#define div 317
#define ll long long
#define rep(a,b) for (int i=(a);i<=(b);i++)

int n,m,cnt,L,R,A,B;
ll sz[div+1];
ll s[div*div],opt[div+1],sum[div+1];

void ADD(ll add)
{
	int l=L/div,r=R/div;
	rep(L%div,min((int)sz[l],R%div)) 
		s[i]+=add,sum[l]+=add;
	if(l!=r)
		rep(0,R%div) 
			s[i]+=add,sum[r]+=add;
	rep(l+1,r-1) opt[i]+=add;
}

void SUM()
{
	ll ans=0ll;
	int l=L/div,r=R/div;
	rep(L%div,min((int)sz[l]-1,R%div)) 
		ans+=s[i]+opt[l];//cout<<"!!!"<<ans<<endl;
	if (l!=r)
		rep(0,R%div) 
			ans+=s[i]+opt[r];
	rep(l+1,r-1) 
		ans+=sum[i]+opt[i]*sz[i];
	printf ("%lld\n",ans);
}

int main()
{
	int x;ll z;
	char t[20];
	
	freopen("shuliec.in","r",stdin);
	freopen("shuliec.out","w",stdout);
	
	cin>>n;
	rep(0,n-1){
		cin>>s[i];
		sz[cnt]++;sum[cnt]+=s[i];
		if (sz[cnt]==div) ++cnt;
	}

	scanf ("%d",&m);
	rep(1,m)
	{
		cin>>t>>L>>R;
		L--,R--;
		if (t[0]=='S') SUM();
		else cin>>z,ADD(z);
	}
	
	return 0;
}
/*
5
1 2 3 4 5
3
ADD 1 3 1 
ADD 2 3 1
SUM 1 3
*/