记录编号 126019 评测结果 AAAAAAAAAA
题目名称 1317.数列操作C 最终得分 100
用户昵称 ztx 是否通过 通过
代码语言 C++ 运行时间 0.165 s
提交时间 2014-10-10 21:00:29 内存使用 2.32 MiB
显示代码纯文本
/*
	author  :hzoi_ztx
	title   :cogs 1316 数列操作b
	ALG     :树状数组 
	comment :差分 
*/

#include <cstdio>

#define  lowbit(x) x&-x
#define  maxn  100010 

typedef long long ll ;

int n , m ;
int i , j , ch ;
ll d , t1 , t2 ;
ll T1[maxn] , T2[maxn] = {0} , S[maxn] ;
inline ll sum(int p,ll*C) {ll ret=0;while(p>0){ret+=C[p];p-=lowbit(p);}return ret;}
inline void add(int p,ll d,ll*C){while(p<=n){C[p]+=d;p+=lowbit(p);}}

int main() {
	#define READ
	#ifdef  READ
		freopen("shuliec.in" ,"r",stdin ) ;
		freopen("shuliec.out","w",stdout) ;
	#endif
	scanf("%d", &n ) ;
	for (i = 1 ; i <= n ; i ++ ) {
		scanf("%lld", &t1 ) ; S[i] = S[i-1]+t1 ;
	}
	scanf("%d", &m ) ;
	while ( m -- ) {
		while (ch = getchar() , ch!='S'&&ch!='A') ;
		getchar() , getchar() ;
		if (ch == 'S') {
			scanf("%d%d", &i , &j ) ;
			t1 = i*sum(i-1,T1)-sum(i-1,T2) ;
			t2 = (j+1)*sum(j,T1)-sum(j,T2) ;
			printf("%lld\n", t2-t1+S[j]-S[i-1]) ;
		}
		else {
			scanf("%d%d%lld", &i , &j , &d ) ;
			add(i,d,T1) ; add(j+1,-d,T1) ;
			add(i,d*i,T2) ; add(j+1,(-d)*(j+1),T2) ;
		}
	}
	return 0 ;
}