标签:des style blog http java color os strong
1 #include <iostream> 2 #include <stdio.h> 3 #include <memory.h> 4 using namespace std; 5 6 int n, a[50005]; 7 char sh[15]; 8 9 int lowbit(int i) //树状数组最巧妙之处:i&(-i) 10 { 11 return i&(-i); 12 } //满足2^k<=t的最大的2^k,其中k为非负整数 13 14 void update(int i, int val) //更新函数 15 { 16 while(i <= n) 17 { 18 a[i] += val; 19 i += lowbit(i); 20 } 21 } 22 23 int sum(int i) //求和函数 24 { 25 int sum = 0; 26 while(i > 0) 27 { 28 sum += a[i]; 29 i -= lowbit(i); 30 } 31 return sum; 32 } 33 34 int main() 35 { 36 int i, val, t, x, y, zz = 1; 37 scanf("%d", &t); 38 while(t--) 39 { 40 memset(a, 0, sizeof(a)); 41 scanf("%d", &n); 42 for(i = 1; i <= n; i++) 43 { 44 scanf("%d", &val); 45 update(i, val); 46 } 47 printf("Case %d:\n", zz++); 48 while(scanf("%s", sh)) 49 { 50 if(sh[0] == ‘E‘) break; 51 scanf("%d %d", &x, &y); 52 if(sh[0] == ‘A‘) update(x, y); 53 else if(sh[0] == ‘S‘) update(x, -y); 54 else printf("%d\n", sum(y)-sum(x-1)); //两段区间和相减 55 } 56 } 57 58 return 0; 59 }
分析过程是简单的,所有的操作加起来一共是三个函数,主要是搞懂他们的意思就一切OK了
标签:des style blog http java color os strong
原文地址:http://www.cnblogs.com/tianxia2s/p/3874961.html