eg。
hdu1166(单点修改区间求和)
#include<bits/stdc++.h>
#define maxn 111111
using namespace std;
int n;
int c[maxn];
int b[maxn];
int lowbit(int x) {
return x&-x;
}
/**单点修改区间求和**/
/**
add(x,num);
sum(r)-sum(l-1);
每次x号位置修改num
求lr闭区间的和
**/
void add(int k,int num) {
while(k<=n) {
c[k]+=num;
k+=lowbit(k);
}
}
int sum(int k) {
int ans=0;
while(k) {
ans+=c[k];
k-=lowbit(k);
}
return ans;
}
int main()
{
int t;
int kase=0;
scanf("%d",&t);
while(t--) {
memset(c,0,sizeof c);
printf("Case %d:\n",++kase);
scanf("%d",&n);
int x,y;
for(int i=1;i<=n;i++) {
scanf("%d",&x);
add(i,x);
}
char s[10];
while(scanf("%s",s)&&strcmp(s,"End