uva 11922 (伸展樹模板題)

2021-08-21 19:49:37 字數 1003 閱讀 8229

給你乙個長度為n 的序列(初始值為1到n)。有m 次操作,每次操作有l  r 你需要將l 到 r 的數字翻轉。然後放到最後

m次操作後輸出答案。

**:

#includeusing namespace std;

const int inf =0x3f3f3f3f;

struct node

void maintain()

void push_down() }

};node *null= new node(); // 建立乙個空的節點 避免 null指標的錯誤。也可以有其他的寫法

// 每個葉節點的兩個孩紙指標都會連向該節點。可以理解為 訪問到葉節點的標誌

void rotate(node* &o,int d) // d 為0表示左旋,為1表示右旋

void splay(node* &o,int k) // 找到第k小的並進行旋轉操作 使得該節點旋轉到根

rotate(o,d^1); }}

node* merge(node *left,node *right) //left!=null 合併操作

void split(node* o,int k,node* &left,node* &right) //分離操作

const int maxn=100000+1000;

struct splaysequence

void init(int sz) };

vector< int >ans;

void print(node *o)

}void debug(node* o)

}splaysequence ss;

// 分離操作,左子樹不能為空,所以對於該題來說,我們可以建立一棵

// 葉節點為n+1 的樹 ,這樣 -1 就是我們要的答案。

int main()

print(ss.root);

for(int i=1;ireturn 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...

伸展樹模板

給定乙個數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 12304 幾何模板題

uva12304 2d geometry 110 in 1 rujia liu include include include include include include includeusing namespace std const double eps 1e 6 int dcmp doub...