记录编号 534732 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 数列操作C 最终得分 100
用户昵称 Gravatarleon 是否通过 通过
代码语言 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;
}