伸展樹模板

2021-08-05 19:33:17 字數 1216 閱讀 3196

#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[maxn], cnt;

int a[maxn];

int pre[maxn], ch[maxn][0], size[maxn], key[maxn];

int root, tot1;

//pushup pushdown

void update_add(int r, int v)

void update_rev(int r)

void pushup(int r)

void pushdown(int r)

if(rev[r])

}//初始化部分

void newnode(int &r, int fa, int v)

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

void init()

////旋轉,0為左旋、1為右旋

void rotate(int x, int kind)

//伸展操作,將r轉到goal下面

void splay(int r, int goal)

else

else

}} pushup(r);

if(goal == 0) root = r;

}//求序列第k個元素的節點

int kth(int r, int k)

//反轉區間[l,r]

void reverse(int l, int r)

//插入操作。在pos位置後插入len個元素 a[0]~a[len-1]

void insert(int len)

//刪除節點

void erase(int r)

}//刪除操作,刪除pos位置後面的len個元素 a[pos+1]~a[pos+len]

void delete(int len)

//切割插入,將序列第a~b個元素刪除並插入到剩餘序列的第c個元素後面

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

伸展樹模板

給定乙個數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 cons...

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...