| 比赛 | 
    十一中校庆欢乐赛 | 
    评测结果 | 
    AAAAAAAWWW | 
    | 题目名称 | 
    求和问题 | 
    最终得分 | 
    70 | 
    | 用户昵称 | 
    ztx | 
    运行时间 | 
    0.551 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.33 MiB  | 
    | 提交时间 | 
    2014-10-23 18:05:32 | 
显示代码纯文本
/*
	author :hzoi_ztx
	title  :cogs 36. 求和问题
	ALG    :树状数组 
	CMT    :
	[2014 10 23]
*/
#include <cstdio>
#define  maxn  10010
#define  lowbit(x) x&(-x)
int n , m ;
int C[maxn] = {0} ;
void insert(int p, int d) {
	while (p <= n) {
		C[p] += d ;
		p += lowbit(p) ;
	}
}
int query(int p) {
	int ret = 0 ;
	while (p) {
		ret += C[p] ;
		p -= lowbit(p) ;
	}
	return ret ;
}
int main() {
	#define READ
	#ifdef  READ
		freopen("sum.in" ,"r",stdin ) ;
		freopen("sum.out","w",stdout) ;
	#endif
	int i , x , y ;
	scanf("%d", &n ) ;
	for (i = 1 ; i <= n ; i ++ ) {
		scanf("%d", &x ) ;
		insert(i , x) ;
	}
	scanf("%d", &m ) ;
	for (i = 1 ; i <= m ; i ++ ) {
		scanf("%d%d", &x , &y ) ;
		printf("%d\n", query(y)-query(x-1) ) ;
	}
	#ifdef  READ
		fclose(stdin ) ;
		fclose(stdout) ;
	#endif
	return 0 ;
}