bzoj3223 文藝平衡樹
description話說這裡雖然不用找前驅後繼什麼亂七八糟的東東您需要寫一種資料結構(可參考題目標題),來維護乙個有序數列,其中需要提供以下操作:翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是[2,4]的話,結果是5 2 3 4 1
input
第一行為n,m n表示初始序列有n個數,這個序列依次是(1,2……n-1,n) m表示翻轉操作次數
接下來m行每行兩個數[l,r] 資料保證 1<=l<=r<=n
output
輸出一行n個數字,表示原始序列經過m次變換後的結果
sample input
5 3
1 3
1 3
1 4
sample output
4 3 2 1 5
但是「旋轉標記」到底是個什麼東東啊!!
???????
標記是否旋轉過
類似於線段樹lazy的用法
#include
#include
using namespace std;
int root,len,n,m;
struct node
tr[110000];
void update(int
x)void rotate(int
x,int w)
void splay(int
x,int rt)
else
else
if (tr[f].son[1]==x&&tr[ff].son[1]==f)
else
if (tr[f].son[0]==x&&tr[ff].son[1]==f)
else
if (tr[f].son[1]==x&&tr[ff].son[0]==f) }}
if (rt==0) root=x;
}void swap(int &x,int &y) //交換
void pushdown(int
x) //每次要給兒子做事之前先更新一次,類似於lzay的用法
} int findshuzi(int k)
else
if(k>tr[lc].c+1)
else
//每次更新都要pushdown一遍
}returnx;}
int build(int l,int r) //add在這裡了啦
//build(l,r)建一棵編號是l~r的樹
void print(int
x)//輸出
void cal(int l,int r)
int main()
print(root);
return
0;}
BZOJ 3223 文藝平衡樹
您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 n,m 100000 splay拿來練翻轉 這題就只用支援翻轉,很裸 翻轉區間 x,y 的操作 提取該區間,打乙個bo...
bzoj 3223 文藝平衡樹
題意 對於乙個1 n的序列。進行m次區間反轉操作 求最後反轉過的區間。n,m 100000。題解 splay躶題。寫完維修數列之後感覺這種題都好寫了。反轉啥的打個標記下傳就好,記得輸出時再pushdown標記就好了 這篇題解就是說一下單旋和雙旋的簡單差別 爺爺結點就是目標的情況不討論了 zig za...
bzoj 3223 文藝平衡樹
題目大意 維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 思路 splay 區間操作 棒神 1 include2 include3 include4 include5 include6 include7 i...