HDU 1166 树状数组

来源:互联网 发布:java技术的web服务器 编辑:程序博客网 时间:2024/05/29 15:05

题解:

关于树状数组:树状数组


AC code:

//lrl's submission#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cctype>#include<vector>#include<map>#include<cmath>#include<queue>#include<stack>#include<iostream>using namespace std;#define lowbit(x) (x & (-x))#define debug 0#define inf 0x3f3f3f3f#define M(a, b) memset(a, b, sizeof(a))const int maxn = 50000 + 5;int sum[maxn], a, b;                    //四倍空间int n;void query(int l, int r) {    int la = 0, ra = 0;    l--;    while (l) {        la += sum[l];        l -= lowbit(l);    }    while (r) {        ra += sum[r];        r -= lowbit(r);    }    printf("%d\n", ra - la);}void Add(int i, int a) {    while (i <= n) {        sum[i] += a;        i += lowbit(i);    }}int main(){#if debug    freopen("in.txt", "r", stdin);#endif // debug    int t;    scanf("%d", &t);    char s[10];    for (int kase = 1; kase <= t; kase++)    {        printf("Case %d:\n", kase);        M(sum, 0);        //build();        scanf("%d", &n);        for (int i = 1; i <= n; ++i) {            scanf("%d", &a);            Add(i, a);        }        while (~scanf("%s", s))        {            if (s[0] == 'E') break;            scanf("%d%d", &a, &b);            if (s[0] == 'A')            {                Add(a, b);            }            if (s[0] == 'S')            {                Add(a, -b);            }            if (s[0] == 'Q')            {                query(a, b);            }        }    }    return 0;}

summary

 cin, cout TLE +1

0 0