一维树状数组
題目:http://acm.nyist.net/JudgeOnline/problem.php?pid=116
?
#include <iostream> #include <string.h> #include <stdio.h>using namespace std; const int N = 1000005;int n; int c[N];int Lowbit(int k) {return k & (-k); }void add(int k,int val) {for(int i=k; i<=n; i+=Lowbit(i))c[i]+=val; }int sum(int k) {int ans=0;for(int i=k; i>0; i-=Lowbit(i))ans += c[i];return ans; }int main() {char ch[25];int x,y,v,Q;while(~scanf("%d%d",&n,&Q)){memset(c,0,sizeof(c));for(int i=1; i<=n; i++){scanf("%d",&v);add(i,v);}while(Q--){scanf("%s%d%d",ch,&x,&y);if(ch[0] == 'Q')printf("%d\n",sum(y)-sum(x-1));elseadd(x,y);}}return 0; }
?
總結
- 上一篇: 线段树求区间和(单点更新)
- 下一篇: 二次筛法