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