hdu1166敌兵布阵

来源:互联网 发布:淘宝免费流量获取途径 编辑:程序博客网 时间:2024/05/29 13:25

树状数组裸题,区间查询,区间加,区间减

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<string>#include<map>#include<vector>using namespace std;const int maxn = 50010;int T,n,a[maxn],b[maxn];string cmd;int lowbit(int x){    return x&(-x);}void add(int i,int x){    while(i<=n)    {        b[i]+=x;        i+=lowbit(i);    }}int sum(int x){    int sum=0;    while(x)    {        sum+=b[x];        x-=lowbit(x);    }    return sum;}void reduce(int i,int x){    while(i<=n)    {        b[i]-=x;        i+=lowbit(i);    }}int main(){    scanf("%d",&T);    int kas=1;    while(T--)    {        printf("Case %d:\n",kas++);        memset(b,0,sizeof(b));        memset(a,0,sizeof(a));        scanf("%d",&n);        for(int i=1; i<=n; i++)        {            scanf("%d",&a[i]);            add(i,a[i]);        }        while(cin>>cmd)        {            int a,b;            if(cmd=="End")                break;            if(cmd=="Query")            {                scanf("%d %d",&a,&b);                printf("%d\n",sum(b)-sum(a-1));            }            else if(cmd=="Add")            {                scanf("%d %d",&a,&b);                add(a,b);            }            else if(cmd=="Sub")            {                scanf("%d %d",&a,&b);                reduce(a,b);            }        }    }    return 0;}


0 0