用樹狀陣列實現的平衡樹

2022-05-27 15:39:07 字數 853 閱讀 1933

洛谷模板

用樹狀陣列實現的平衡樹,實現起來很簡單,但有很多細節需要考慮。

維護乙個權值樹狀陣列,查排名時直接字首和,前驅、後繼都很簡單。比較難的是已知排名求值,需要倍增。

怎麼能寫二分呢?倍增比二分快幾百倍。——lsh

需要離散化,而細節很多,具體看**。

#include#include#includeusing namespace std;

inline int read(void)

while(ch>='0'&&ch<='9')

return f*x;

}const int maxn=100005;

int n,b[maxn],cnt;

struct optq[maxn];

struct bit

inline void add(int p,int x)

}inline int rank(int p)

return ans;

}inline int val(int rank)

return ++ans;

}inline int pre(int x)

inline int nxt(int x)

}t;int main()

sort(b+1,b+cnt+1);

cnt=unique(b+1,b+cnt+1)-b-1;

for(register int i=1;i<=n;++i)

for(register int i=1;i<=n;++i)

}system("pause");

return 0;

}

3262 陌上花開 樹狀陣列套平衡樹 CDQ分治

就是解決乙個三維偏序問題,可以用樹套樹來解決。第一維排序,第二維放到樹狀陣列裡,每個樹狀陣列下建平衡樹維護第三維。我們按第一維排序後從小到大加入,每次到乙個點時就把樹狀陣列中小於等於第二維的掃一遍,再找平衡樹里小於等於第三維的,這樣就可以了。我們還可以用強大的cdq分治來解決。同樣是第一維排序,然後...

java 實現平衡樹

package 平衡樹 public class tree 計算高度 public int hi node t public void insert int element public node insert int data,node rot if data rot.data 用當前值與根節點的...

線段樹,樹狀陣列,主席樹

樹狀陣列 主席樹 包括無修改和可修改。用乙個滿二叉樹 葉子節點可以為空 來維護乙個連續陣列,整個樹的所有葉子節點從左到右表示整個陣列,每個非葉子節點表示其所有葉子的集合所描述的乙個連續子陣列的某一特性 最小值,最大值等 可以在logn的複雜度內實現對任意連續欄位的給定特性的查詢 最小值等 可以在lo...