记录编号 |
534732 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
数列操作C |
最终得分 |
100 |
用户昵称 |
leon |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
3.293 s |
提交时间 |
2019-07-03 10:47:05 |
内存使用 |
15.95 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define MAXN 100001
#define lowbit(x) x&(-x)
ll n,m;
ll a[100005] = {0};
ll sum1[100005];
ll sum2[100005];
void update(ll i,ll k){
ll x = i;
while(i <= n){
sum1[i] += k;
sum2[i] += k * (x-1);
i += lowbit(i);
}
}
ll getsum(ll i){
ll res = 0, x = i;
while(i > 0){
res += x * sum1[i] - sum2[i];
i -= lowbit(i);
}
return res;
}
int main(){
freopen("shuliec.in","r",stdin);
freopen("shuliec.out","w",stdout);
ll m,a1,b1,c1;
char aa[10];
cin>>n;
for(ll i = 1; i <= n; i++){
cin>>a[i];
update(i,a[i] - a[i-1]);
}
cin>>m;
for(ll i=1;i<=m;i++){
cin>>aa;
if(aa[0]=='A'){
cin>>a1>>b1>>c1;
update(a1,c1);
update(b1+1,-c1);
}
else{
cin>>a1>>b1;
ll sum = getsum(b1) - getsum(a1-1);
cout<<sum;
}
}
return 0;
}