bzoj3223 文藝平衡樹(平衡樹區間翻轉)

2021-08-15 21:09:01 字數 1159 閱讀 4971

time limit: 10 sec  

memory limit: 128 mb

submit: 6177  

solved: 3679 [

submit][

status][

discuss]

您需要寫一種資料結構(可參考題目標題),來維護乙個有序數列,其中需要提供以下操作:

翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是[2,4]的話,結果是5 2 3 4 1 

第一行為n,m n表示初始序列有n個數,這個序列依次是(1,2……n-1,n)  m表示翻轉操作次數

接下來m行每行兩個數[l,r] 資料保證 1<=l<=r<=n 

輸出一行n個數字,表示原始序列經過m次變換後的結果 

5 31 31 3

1 44 3 2 1 5

n,m<=100000

題解:平衡樹板子

**:

/*

將當前排名為l-1 +1 的節點轉到根

將當前排名為r+2的節點轉到根的右子樹的根節點

則根的右子樹的根節點的左子樹為所求區間

直接打標記就可以了

*/#includeusing namespace std;

const int n=100005;

int n,m,sz,rt,pre[n],l,r,c[n][2],data[n],size[n],rev[n];

void pushup(int k)

void pushdown(int k)

}void rotate(int x,int &k)

pre[x]=z;pre[y]=x;pre[c[x][r]]=y;

c[y][l]=c[x][r];c[x][r]=y;

pushup(y);pushup(x);

} void splay(int x,int &k)

rotate(x,k);

}}int find(int k,int rank)

void change(int l,int r)

void build(int l,int r,int f)

for(int i=2;i<=n+1;i++)printf("%d ",find(rt,i)-1);

return 0;

}

BZOJ 3223 文藝平衡樹

您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 n,m 100000 splay拿來練翻轉 這題就只用支援翻轉,很裸 翻轉區間 x,y 的操作 提取該區間,打乙個bo...

bzoj3223 文藝平衡樹

bzoj3223 文藝平衡樹 description 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列,其中需要提供以下操作 翻轉乙個區間,例如原有序序列是5 4 3 2 1,翻轉區間是 2,4 的話,結果是5 2 3 4 1 input 第一行為n,m n表示初始序列有n個數,這個序列依次...

bzoj 3223 文藝平衡樹

題意 對於乙個1 n的序列。進行m次區間反轉操作 求最後反轉過的區間。n,m 100000。題解 splay躶題。寫完維修數列之後感覺這種題都好寫了。反轉啥的打個標記下傳就好,記得輸出時再pushdown標記就好了 這篇題解就是說一下單旋和雙旋的簡單差別 爺爺結點就是目標的情況不討論了 zig za...