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