Splay luogu P3391 文藝平衡樹

2022-04-30 20:00:11 字數 759 閱讀 4764

文藝平衡樹 一道大家熟知的splay區間翻轉模板題

基於splay的區間翻轉,我們要做的只有這些:

1、像線段樹一樣打翻轉標記,不過由於翻轉是可以抵消的,所以可以採取位運算節省時間

2、翻轉只需要逐層翻轉即可,正確性已有論證

3、對於區間如何確定的問題,我們只需要將l-1節點旋至根,r+1節點旋至根下即可

4、對於1~x或x~n區間的操作,我們還需要0和n+1這兩個哨兵節點

#include #include 

using

namespace

std;

const

int n=1e5+10

;struct

node t[n];

intcnt,rt;

intn,m;

void update(int

x) void pushdown(int

x) bool witch(int x)

void rotate(int

x) void splay(int x,int

goal)

void build(int &x,int l,int

r) int get(int x,int y,int

goal)

}void print(int

x) void change(int l,int

r) int

main()

print(rt);

}

view code

BZOJ3391 小球遊戲

題目描述 輸入格式 第一行乙個整數n n 200000 接下來n行,每行兩個整數ai和bi ai,bi 3000 輸出格式 由於實際答案可能很大,你只需要輸出e c n,2 的值對998244353取餘的結果,其中e表示期望值的準確值。樣例輸入 4 0 01 1 0 11 0 樣例輸出 12 樣例解...

P3391 模板 文藝平衡樹

題目鏈結 題目描述 您需要寫一種資料結構 可參考題目標題 來維護乙個有序數列。其中需要提供以下操作 翻轉乙個區間,例如原有序序列是 543 215 4 3 2 1 5432 1,翻轉區間是 2,4 2,4 2,4 的話,結果是 523 415 2 3 4 1 52341。輸入格式 第一行兩個正整數 ...

P3391 模板 文藝平衡樹(Splay)

題目背景 這是一道經典的splay模板題 文藝平衡樹。題目描述 輸入輸出格式 輸入格式 第一行為n,m n表示初始序列有n個數,這個序列依次是 1,2,n 1,n m表示翻轉操作次數 接下來m行每行兩個數 l,r 資料保證 1 l r n 輸出格式 輸出一行n個數字,表示原始序列經過m次變換後的結果...