记录编号 |
375838 |
评测结果 |
WWWWWWWWWW |
题目名称 |
数列操作C |
最终得分 |
0 |
用户昵称 |
zjh001 |
是否通过 |
未通过 |
代码语言 |
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
*/