http://acm.hdu.edu.cn/showproblem.php?pid=1166

나무 모양 배열 의 입문 문제.s [N] 은 현재 아래 표 시 된 모든 요소 의 합 을 나타 낸다.
p - lowbit (p) 는 p 에 포함 되 지 않 습 니 다.
p + lowbit (p) 에는 p...
#include<iostream>
#include<string.h>
#include<string>
#include<cstdio>
#define N 50005
using namespace std;
int s[N];
int lowbit(int x)
{return x&(-x);}
void update(int x,int a)
{
    while(x<N)
  {   s[x]+=a;
    x+=lowbit(x);
  }
}
int Quary(int x)
{ int sum=0;
   while(x>0)
   { sum+=s[x];
     x-=lowbit(x);
   }
   return sum;
}
int main()
{ int T;
  scanf("%d",&T);
    for(int k=1;k<=T;++k)
    {  memset(s,0,sizeof(s));
        int n,a,b;
        int tot=0;
       scanf("%d",&n);
       for(int i=1;i<=n;++i)
       { int a;
        scanf("%d",&a);
         update(i,a);
       }
       printf("Case %d:
",k); char s1[10]; while(scanf("%s",s1),strcmp(s1,"End")) { scanf("%d%d",&a,&b); if(s1[0]=='E') break; else if(s1[0]=='A') update(a,b); else if(s1[0]=='S')update(a,-b); else printf("%d
",Quary(b)-Quary(a-1)); } }return 0; }

좋은 웹페이지 즐겨찾기