這是一道經典的splay模板題——文藝平衡樹。
輸入格式:
第一行為n,m n表示初始序列有n個數,這個序列依次是(1,2, \cdots n-1,n)(1,2,⋯n−1,n) m表示翻轉操作次數
接下來m行每行兩個數 [l,r][l,r] 資料保證 1 \leq l \leq r \leq n1≤l≤r≤n
輸出格式:
輸出一行n個數字,表示原始序列經過m次變換後的結果
#include usingnamespace
std;
const
int maxn = 100000+5
;const
int inf = 2000000008
;int root,tot,ch[maxn][2
],lazy[maxn],fa[maxn],siz[maxn];
intn,m;
struct
splay
void up(int
t)
void down(int
t)
void
init()
int find( int x, int t =root)
void rotate(int x, int
d) ch[x][d] = y;fa[y] =x;
up(y),up(x);
}void splay(int x, int
targrt)
else
}if(!targrt)root =x;
}int build(int f, int l, int
r)
void rev(int l, int
r)}tr;
intmain()
for(int i = 1; i <= n; i++)printf("
%d ",tr.find(i+1)-1
);
return0;
}
文藝平衡樹(splay模板)
題幹 splay模板,要求維護區間反轉。splay是一種碼量小於treap,但支援排名,前驅後繼等treap可求的東西,也支援區間反轉的平衡樹。但是有兩個壞處 1.splay常數遠遠大於treap以及stl中的set。2.沒有可持久化splay,但有可持久化treap。下面是 1.pushup以及p...
文藝平衡樹 Splay
鏈結 splay板子題 結果還調了很久的題,這就是搞文化課的 顯然維護陣列下標,使得splay的中序遍歷始終為當前數列 值得注意 旋轉時始終要記得更新節點 注意更新root節點 每次寫都忘.jpg includeusing namespace std const int maxn 100000 10...
文藝平衡樹Splay
splay是平衡樹 splay 是平衡樹的一種 基本思想是,對於查詢頻率較高的節點,使其處於離根節點相對較近的節點。spaly的基本操作有 struct node tr n 這個旋轉操作跟資料結構裡學的平衡樹旋轉操作是一樣的。如下圖,畫的是右旋 x 的操作,藍色的邊表示資訊發生了改變 void ro...