记录编号 |
424138 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
数列操作C |
最终得分 |
100 |
用户昵称 |
~玖湫~ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.161 s |
提交时间 |
2017-07-12 20:55:25 |
内存使用 |
2.19 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define ll long long
const int M=100000+10;
ll n,m;
ll a[M],sum[M],b[M],c[M];
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline int lb(int x){return (x&-x);}
inline ll add(ll a[],ll pos,ll zhi){
while(pos<=n){
a[pos]+=zhi;
pos+=lb(pos);
}
}
inline ll query(ll a[],ll pos){
ll ans=0;
while(pos){
ans+=a[pos];
pos-=lb(pos);
}
return ans;
}
int DK(){
freopen("shuliec.in","r",stdin);
freopen("shuliec.out","w",stdout);
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
sum[i]=sum[i-1]+a[i];
}
m=read();
char s[5];
ll aa,bb,cc;
for(int i=1;i<=m;i++){
scanf("%s",s);
aa=read();bb=read();
if(s[0]=='A'){
cc=read();
add(b,aa,cc);add(b,bb+1,-cc);
add(c,aa,aa*cc);add(c,bb+1,(-cc)*(bb+1));
}
else{
ll ans1=sum[bb]+(bb+1)*query(b,bb)-query(c,bb);
ll ans2=sum[aa-1]+aa*query(b,aa-1)-query(c,aa-1);
printf("%lld\n",ans1-ans2);
}
}
//while(1);
return 0;
}
int dk=DK();
int main(){
;
}