模板:树状数组二分
所謂樹狀數組二分,就是在樹狀數組上進行二分
(逃)
解析
很巧妙
我們都知道可以在線段樹上利用其本身平衡二叉的性質進行二分,很多時候能剩下一個log
但是樹狀數組其實也是可以二分的
說是二分,其實更像倍增
畢竟不同于線段樹,樹狀數組這個數據結構本身就是基于二進制實現的
從大到小枚舉冪次,然后判斷如果指針可以移過去就移動
還需要一個累加器記錄沿路累加的 f 數組的和
代碼長度再次吊打線段樹
代碼
這個是在單調不增的數組中找到最后一個>=val的位置
inline int find(int val){int res=0,pl=0;for(int k=18;k>=0;k--){if(pl+mi[k]>n||res+f[pl+mi[k]]<val) continue;pl+=mi[k];res+=f[pl];}return pl; }總結
- 上一篇: 冬季运动有风险?戴上华为智能手表就稳了
- 下一篇: CF1404C:Fixed Point