題目大意:略
splay維護區間翻轉裸題,為了減少不必要的麻煩,多插入兩個點,分別是0和n+1
每次找區間的第k個值,就在splay上二分即可
順便學了一下splay的完美建樹,而且splay有一些小函式可以巨集定義或者用inline,跑得飛快
最後跑一遍中序遍歷即可
1 #include 2 #include 3 #include 4#define n 100100
5#define il inline
6#define ll long long
7#define root d[0].ch[1]
8#define con(x,ff,p) d[x].fa=ff,d[ff].ch[p]=x
9#define idf(x) d[d[x].fa].ch[0]==x?0:1
10#define lb(x) (x&(-x))
11using
namespace
std;
1213
intn,m,cnt;
14struct
splayd[n<<1
];17 il void pushup(int x)
18 il void pushdown(int
x)19
26 il void rot(int
x)27
35void splay(int x,int
to)36
else51}
52}53int find(int
w)54
64 w-=d[d[x].ch[0
]].sum;
65if(w==1) return
x;66 w--,x=d[x].ch[1
];67}68
return0;
69}70int build(int ff,int l,int
r)71
81void print(int
x)82
88int
main()
89103
print(root);
104return0;
105 }
文藝平衡樹 Splay
鏈結 splay板子題 結果還調了很久的題,這就是搞文化課的 顯然維護陣列下標,使得splay的中序遍歷始終為當前數列 值得注意 旋轉時始終要記得更新節點 注意更新root節點 每次寫都忘.jpg includeusing namespace std const int maxn 100000 10...
文藝平衡樹Splay
splay是平衡樹 splay 是平衡樹的一種 基本思想是,對於查詢頻率較高的節點,使其處於離根節點相對較近的節點。spaly的基本操作有 struct node tr n 這個旋轉操作跟資料結構裡學的平衡樹旋轉操作是一樣的。如下圖,畫的是右旋 x 的操作,藍色的邊表示資訊發生了改變 void ro...
文藝平衡樹(splay模板)
題幹 splay模板,要求維護區間反轉。splay是一種碼量小於treap,但支援排名,前驅後繼等treap可求的東西,也支援區間反轉的平衡樹。但是有兩個壞處 1.splay常數遠遠大於treap以及stl中的set。2.沒有可持久化splay,但有可持久化treap。下面是 1.pushup以及p...