hdu1166

来源:互联网 发布:mac打开excel很慢 编辑:程序博客网 时间:2024/04/30 02:32
#include <iostream>#include <cstdio>using namespace std;const int maxn = 50005;int a[maxn];int sum[4*maxn];void build(int u, int l, int r){    if(l == r)    {        sum[u] = a[l];        return ;    }    int mid = (l+r)>>1;    build(2*u, l, mid);    build(2*u+1, mid+1, r);    sum[u] = sum[2*u] + sum[2*u+1];}void Update(int u, int l, int r, int pos, int val){    if(l == r)    {        sum[u] += val;        return ;    }    int mid = (l+r)>>1;    if(pos <= mid) Update(2*u, l, mid, pos, val);    else Update(2*u+1, mid+1, r, pos, val);    sum[u] = sum[2*u] + sum[2*u+1];}int Query(int u, int l, int r, int tl, int tr){    if(tl <= l && r <= tr)    {        return sum[u];    }    int mid = (l+r)>>1;    if(tr <= mid) return Query(2*u, l, mid, tl, tr);    else if(tl > mid) return Query(2*u+1, mid+1, r, tl, tr);    else    {        int t1 = Query(2*u, l, mid, tl, mid);        int t2 = Query(2*u+1, mid+1, r, mid+1, tr);        return t1+t2;    }}int main(){    int T, tcase = 0;    scanf("%d", &T);    while(T--)    {        int n;        scanf("%d", &n);        for(int i = 1; i <= n; i++) scanf("%d", a+i);        build(1, 1, n);        printf("Case %d:\n", ++tcase);        char ch[10];        while(scanf("%s", ch) && ch[0] !='E')        {            int l, r;            scanf("%d%d", &l, &r);            if(ch[0] == 'Q') printf("%d\n", Query(1, 1, n, l, r));            else            {                if(ch[0] == 'S') r *= -1;                Update(1, 1, n, l, r);            }        }    }    return 0;}

原创粉丝点击