一直用 线段树 求区间最大值,想换种思路,用树状数组试试,肯定是可以的。
首先要对 树状数组的每个 i 所管理的区间有一定的理解。详见上篇博客: 树状数组(BIT)

如图, A数组表示的时输入的数组, C 是树状数组,
树状数组 C[i] 所包含的区间时 [ i - lowbit(i) + 1, i], 其中区间的个数是 lowbit(i) 个, C[i] 一定包含A[i]
之后就可以像 线段树一样进行区间更新和查询操作了.需要更新(查询)子区间就更新(查询)子区间,需要更新(查询)父结点就更新(查询)父结点,
以 HDU1754 为例, 代码如下:
//Author LJH
//www.cnblogs.com/tenlee
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
原文链接: http://sbp810050504.blog.51cto.com/2799422/1051811