1. 程式人生 > >國慶清北 數據結構

國慶清北 數據結構

管理器 區間修改 改變 樓房重建 得到 最小 結構 比較 ==

數據結構:
樹狀數組,堆
節點和左右兒子合並的線段樹

樹狀數組:
快速求前綴和,單點修改
刪東西,加東西,查詢最小值,最大值
lowbit(4)=4
每個位置存一段區間的和
二維樹狀數組???n*m的空間


線段樹,動態開節點序列
核心:區間可合並性
借教室:區間減法,求區間最小值
線段樹一定可以1e5 ,維護少,域小可以過1e6
最大子段和:支持區間賦值,常數時間內得到更新完的信息
樓房重建:從頭維護嚴格上升子序列,且支持可合並性
一個區間起碼維護從頭開始子序列...
左 右 右邊怎麽接起來?

並查集路徑壓縮後不能撤銷(時間分治)
啟發式合並:sz[x],sz[y]比較
按秩合並:rk[x],rk[y]
rk[x]>rk[y] x->y
rk[x]==rk[y] 隨機合並 rk[y]++
秩是集合的復雜程度
序列染色:線段樹:全部a[i]=i,染黑a[i]=0求[1,i]最大值
wbtree:白色,LCA代表元,dep最小的
黑色,最後形態,倒過來,不斷染白
每條邊第一次被染黑的時間:

平衡樹:實現線段樹所有,支持修改序列(切,翻轉...)
set有序序列,有增加和刪除???
map很大數組開不下???
dfs序:子樹對應一個區間
進棧寫一遍出棧寫一遍,每個數出現兩次,區間中子樹
子樹操作轉化區間操作
非傳統方法
1.點事件
掃描線一起,
2.分塊 1.處理塊與塊,2.處理塊內
3.cdq分治

數鏈剖分:重邊,輕邊
O(logn)輕邊,每走到一條輕邊,子樹大小乘二+

COT 區間修改->單點修改 差分
重邊差分,gcd不會改變,
更相減損術
差分數組上建線段樹,
數鏈剖分

軟件包管理器:
子樹仍然對應一個區間,鏈logn,子樹n
維護區間黑白數目

非傳統方法:
矩形統計:掃描線 點事件 線段樹 一般一起用(x1,y1) (a,l,r)
x1<x2<a1<x3<a2<a3......
y1加入線段樹->單點修改
l,r 區間求和

天天愛跑步:所有人動,觀察員時刻不同
1.s=0
2.s=d[u]-d[l]
s+d[u]-d[k]=t[k]
s+d[u]=t[k]+d[k] 路徑的值,點的值
一個點,多少路徑經過且權值相等
經過:u在k子樹中,k在l子樹中
l在k到根的路徑上

國慶清北 數據結構