給你乙個長度為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...