树状数组的基本用法
具体树状数组是个什么东西。。。
传送门走起http://baike.sogou.com/v30532138.htm
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<set>
using namespace std;
int lowbit(int x) {return x&-x;}
int c[4000100],n;
int getsum(int x)
{
int now=0;
while (x>0)
{
now+=c[x];
x-=lowbit(x);
}
return now;
}
void insert(int x,int w)
{
while (x<=n)
{
c[x]+=w;
x+=lowbit(x);
}
}
int main()
{
char s[10];
int x,y,t,ci,now;
scanf("%d",&t);
for (ci=1;ci<=t;ci++)
{
memset(c,0,sizeof(c));
printf("Case %d:\n",ci);
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&now);
insert(i,now);
}
while (scanf("%s",s)&&s[0]!='E')
{
if (s[0]=='Q')
{
scanf("%d %d",&x,&y);
printf("%d\n",getsum(y)-getsum(x-1));
}
if (s[0]=='S')
{
scanf("%d %d",&x,&y);
insert(x,-y);
}
if (s[0]=='A')
{
scanf("%d %d",&x,&y);
insert(x,y);
}
}
}
}