bzoj3223 文藝平衡樹

2021-08-02 19:59:07 字數 1459 閱讀 1016

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