树状数组,超级清楚,评论说讲得像他女朋友一样,10分钟就懂了
树状数组可以在logn的时间下完成给a[i]加上一个数.求a[1]—a[i]的和。
对应操作的代码为:
ps:Tree[i]表示a[lowbit(i)+1….i]的和
const int maxn = 1e6+5;
int Tree[maxn];
inline int lowbit(int x){
return (x&-x);
}
void add(int x,int value){
for(int i = x ; i <= maxn;i+=lowbit(i)){
Tree[i]+=value;
}
}
// 求1-x的和
int get(int x){
int sum = 0;
for(int i = x;i;i-=lowbit(i)){
sum+=Tree[i];
}
return sum;
}