文藝平衡樹 一道大家熟知的splay區間翻轉模板題
基於splay的區間翻轉,我們要做的只有這些:
1、像線段樹一樣打翻轉標記,不過由於翻轉是可以抵消的,所以可以採取位運算節省時間
2、翻轉只需要逐層翻轉即可,正確性已有論證
3、對於區間如何確定的問題,我們只需要將l-1節點旋至根,r+1節點旋至根下即可
4、對於1~x或x~n區間的操作,我們還需要0和n+1這兩個哨兵節點
#include #includeview codeusing
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);
}
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次變換後的結果...