比赛 十一中校庆欢乐赛 评测结果 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 ;
}