【NOIP模板】 树状数组

来源:互联网 发布:vb控件加到窗体上 编辑:程序博客网 时间:2024/05/22 07:58
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char s[10];int t[50010], a[50010], n, T;int lowbit(int x) {    return x & (- x);}void add(int x, int pos) {    while(pos <= n) {        t[pos] += x;        pos += lowbit(pos);    }}int find(int x) {    int ans = 0;    while(x) {        ans += t[x];        x -= lowbit(x);    }    return ans;}void init(int x) {    printf("Case %d:\n", x);    memset(t, 0, sizeof(t));}int main() {    scanf("%d", &T);    for(int k = 1; k <= T; k ++) {        init(k);        scanf("%d", &n);        for(int i = 1; i <= n; i ++)            scanf("%d", &a[i]), add(a[i], i);        int i, j;        while(scanf("%s", s) && s[0] != 'E') {            if(s[0] == 'A') {                scanf("%d %d", &i, &j);                add(j, i);            }            else if(s[0] == 'S') {                scanf("%d %d", &i, &j);                add(-j, i);            }            else {                scanf("%d %d", &i, &j);                printf("%d\n", find(j) - find(i - 1));            }        }    }    return 0;}
原创粉丝点击