1. 程式人生 > >[學習筆記]二進制分組

[學習筆記]二進制分組

合並 都是 簡單的 前綴 n) 每次 葉子 log 復雜度

說起來還是很簡單的,就是分塊暴力重構的思想

二進制分組就是把操作的數量二進制拆分,每個二進制位數用數據結構維護

合並的時候,暴力重構

每次查詢,從logn個塊依次用維護的數據結構查詢

例如有23=16+4+2+1,再加一個操作,就合並成:24=16+8

查詢的復雜度是logn*(每一塊)logn其實是二進制下1的個數,比較虛。

暴力重構,如果重構的復雜度都是O(元素個數)的話,O(nlogn)

形象化理解,就是線段樹從葉子開始建,兒子建滿了就merge上去

一些操作因題而異,但是都是維護操作序列的感覺:
1.每次只是對前綴操作序列查詢,重建之後還可以刪除兩個兒子

2.對操作序列的某個區間查詢,線段樹一樣構造+查詢即可

3.支持棧序刪除操作,類似分塊的刪除,懶惰,如果湊成了1 1 1 1 ,才合並2 1 1,湊出2 2 2 2才合並4 2 2,這樣,重構的元素大小和要再次刪除

[學習筆記]二進制分組