记录编号 |
445254 |
评测结果 |
EEEEEEEEEEEEEEE |
题目名称 |
数列操作B |
最终得分 |
0 |
用户昵称 |
swttc |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
1.239 s |
提交时间 |
2017-09-05 17:16:14 |
内存使用 |
7.18 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#define mid (l+r)/2
#define ls o*2
#define rs o*2+1
using namespace std;
long long n,m,sum[400000],a[100010],lazy[400000];
void buildt(long long l,long long r,long long o)
{
if(l==r)
{
sum[o]=a[l];
return;
}//
buildt(l,mid,ls);
buildt(mid+1,r,rs);
sum[o]=sum[ls]+sum[rs];
return;
}
void pushdown(long long l,long long r,long long o)
{
if(l==r) return;
lazy[ls]+=lazy[o];
lazy[rs]+=lazy[o];
sum[ls]+=lazy[o]*(mid-l+1);
sum[rs]+=lazy[o]*(r-mid);
lazy[o]=0;
return;
}
void add(long long l,long long r,long long o,long long ll,long long rr,long long x)
{
if(l>=ll&&r<=rr)
{
lazy[o]+=x;
sum[o]+=(r-l+1)*x;//cout<<lazy[o]<<" "<<o<<endl;
return;
}
pushdown(l,r,o);
if(mid>=ll)
{
add(l,mid,ls,ll,rr,x);
}
if(mid<rr)
{
add(mid+1,r,rs,ll,rr,x);
}
sum[o]=sum[ls]+sum[rs];
return;
}
long long query(long long l,long long r,long long o,long long ll,long long rr)
{//cout<<lazy[o]<<" "<<o<<endl;
long long t=0;
if(l>=ll&&r<=rr)
{
return sum[o];
}
pushdown(l,r,o);
if(mid>=ll)
{
t+=query(l,mid,ls,ll,rr);
}
if(mid<rr)
{
t+=query(mid+1,r,rs,ll,rr);
}
return t;
}
int main()
{
//cout<<(sizeof(sum)+sizeof(a)+sizeof(lazy))/1024/1024;
freopen("shuliec.in","r",stdin);
freopen("shuliec.out","w",stdout);
scanf("%lld",&n);
for(long long i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
buildt(1,n,1);
scanf("%lld",&m);
for(long long i=1;i<=m;i++)
{
string s;
cin>>s;
if(s[0]=='A')
{
long long w,y,q;
scanf("%lld%lld%lld",&w,&y,&q);
add(1,n,1,w,y,q);
//update(1,n,1,w,y);
}
else
{
long long y,q;
scanf("%lld%lld",&y,&q);
printf("%lld\n",query(1,n,1,y,q));
}
}
return 0;
}