首页 > 代码库 > HDU1166 敌兵布阵

HDU1166 敌兵布阵

题解:

树状数组PUIQ(点更新,段求和)裸题

代码:

#include<bits/stdc++.h>using namespace std;#define LL long long const int N=50010;int n;int a[N],c[N];char line[20];int lowbit(int x){return x&(-x);}void add(int x,int v){    int cnt=x;    while(cnt<N){        c[cnt]+=v;        cnt+=lowbit(cnt);    }}int sum(int x){    int ans=0,cnt=x;    while(cnt){        ans+=c[cnt];        cnt-=lowbit(cnt);    }    return ans;}int main(){    int T,Case=1,p,q;    scanf("%d",&T);    while(T--){       memset(c,0,sizeof(c));       scanf("%d",&n);       for(int i=1;i<=n;i++){           scanf("%d",&a[i]);           add(i,a[i]);       }       printf("Case %d:\n",Case++);       while(scanf("%s",line)&&line[0]!=E){             scanf("%d%d",&p,&q);             if(line[0]==Q) printf("%d\n",sum(q)-sum(p-1));          if(line[0]==A) add(p,q);          if(line[0]==S) add(p,0-q);       }        }}

 

HDU1166 敌兵布阵