树状数组
树状数组理解的时候还是打脑壳,但是实现的时候发现那么简单。这个想法确实溜!同样都是数组,我们就只能耍点循环递归就不得了,人家嗯是耍的有盐有味,真的溜
做题推荐用这个顺序:
树状数组题目
void add(int index, int value){
for(int i = index; i <= 32001; i += (i&(-1*i))){
c[i] += value;
}
}
int sum(int index){
int answer = 0;
for(int i = index; i; i -= (i&(-1*i))){
answer += c[i];
}
return answer;
}
HDU1166
之前用线段树做过的基础题
HDU1541
逆序数的模型题
POJ2892
做这道题的时候我还没有研究二分模型,然后想了一些办法,套了区间更新模型,搞了哈能不能把树状数组像线段树那样每个节点记录最大值的信息。最后发现都不得行,感觉这个树状数组只能加减,而且确实查询都只有在求和上面下功夫,虽然树状数组实现比线段树简单很多,但是却是有些操作不简单。。
然后我始终感觉直接用二分法查找一哈就出来,用multiset就可以解决,但是我估计都办要超时之类的,毕竟STL的东西虽然用起方便,但是消耗还是不小的,但是没想到的是居然过了~
POJ2299
离散化+逆序+树状数组
POJ1195
记录二维的sum
POJ2481
这道题也是逆序数模型,但是要注意左右区间相同的情况
POJ1990
开始还以为又是逆序数,我也不晓得是啥子
HDU2492
这道题我没有转过弯,哎~
抄别人一个图:三大OJ推荐


2365

被折叠的 条评论
为什么被折叠?



