伸展樹模板

2021-08-07 19:27:56 字數 2135 閱讀 5146

給定乙個數n,代表有乙個數列1~n,有下面兩種操作:

cut a b c 把區間[a,b]這一段元素切下來接到新序列第c個元素的後面

flip a b 反轉區間[a,b]

最後遍歷整個序列

#define key_val son[son[root][1]][0]

typedef

long

long ll;

const

int n = 300010, inf = 0x3f3f3f3f, mod = 1000000;

int son[n][2], fat[n], siz[n];

int key[n], val[n], lazy[n];

int root, tot, cnt;

int arr[n];

int n, m;

void new_node(int val, int fa, int &x)

void push_up(int x)

void push_down(int x)

}void rotate(int x, int p)

void splay(int x, int goal)

}push_up(x);

if(goal == 0) root = x;

}int get_prec(int x)

int get_succ(int x)

int get_kth(int k)

return x;

}//int get_kth(int x, int k)

//void build(int l, int r, int fa, int &x)

void cut(int a, int b, int c)

void rev(int a, int b)

void inorder(int x)

void init()

int main()

else rev(a, b);

}cnt = 0;

inorder(root);

}return

0;}

插入x數

刪除x數(若有多個相同的數,因只刪除乙個)

查詢x數的排名(若有多個相同的數,因輸出最小的排名)

查詢排名為x的數

求x的前驅(前驅定義為小於x,且最大的數)

求x的後繼(後繼定義為大於x,且最小的數)

const

int n = 100000 + 10;

int son[n][2], key[n], siz[n], fat[n], mul[n];

int root, tot, prec, succ;

void init()

void new_node(int val, int fa, int &x)

void push_up(int x)

void rotate(int x, int p)

void splay(int x, int goal)

}push_up(x);

if(goal == 0) root = x;

}void insert(int val)

int find(int val)

int get_prec(int x)

int get_succ(int x)

void del(int val)

if(!son[root][0] || !son[root][1])

root = son[root][0] + son[root][1], fat[root] = 0;

else

}int get_kth(int k)

return x;

}//int get_kth(int x, int k)

//int get_rank(int val)

void get_prec(int x, int val)

else get_prec(son[x][0], val);

}void get_succ(int x, int val)

else get_succ(son[x][1], val);

}int main()

else

}return

0;}

伸展樹模板

include include include include define key value ch ch root 1 0 using namespace std const int maxn 200000 10 char op maxn 10 int opx maxn int s maxn e...

uva 11922 (伸展樹模板題)

給你乙個長度為n 的序列 初始值為1到n 有m 次操作,每次操作有l r 你需要將l 到 r 的數字翻轉。然後放到最後 m次操作後輸出答案。includeusing namespace std const int inf 0x3f3f3f3f struct node void maintain vo...

伸展樹 入門

參考部落格 部落格鏈結 網上資料不少,留下自己ac 方便以後回看,用的spt模板是部落格裡的題目鏈結 題意 求最小的營業額波動總和 最小的營業額波動 min x y y是之前某天營業額 解法 插入某個數,找前序以及後序即可 include include include include includ...