我想到建两棵树状数组,一棵前缀,一棵后缀,对于正常的树状数组这么写:
while(r-l>=lowbit(r)) ans=max(ans,c[r]),r-=lowbit(r);
后缀树状数组反着写,最后比较一下两个值。
我发现,无论询问什么区间,这两个值都完全覆盖查询区间,并且没有重叠。
有没有办法证明或理解它?