codevs1743 反轉卡片

2022-05-21 14:12:12 字數 1098 閱讀 1303

(題目鏈結)

給出乙個序列,要求維護這樣一種操作:將前a1個數反轉,若第a1等於1,則停止操作。

像這種帶有反轉區間的操作,大概就是splay了。碼了乙個晚上。。。

splay一般就是處理區間反轉,區間插入,區間刪除這三種線段樹等資料結構無法處理的操作,splay難寫又難調,經常犯一些鬼畜錯誤,能不寫就盡量不寫的好。。splay不是二叉搜尋樹,但它有乙個很優秀的性質:樹的中序遍歷出來的序列就是原始序列。這樣我們方便的就可以處理區間上的問題,比如說對於區間[l,r],我們將l-1splay到樹根,將r+1splay到樹根的右兒子,那麼我們要修改的區間就是樹根的右兒子的左兒子子樹。

所以對於這道題,我們每次反轉時,先將splay兩遍,然後再給節點[l,r]打上標記即可。**模著hzwer寫的,感覺很優秀。

// codevs1743

#include#include#include#include#include#include#define ll long long

#define inf 2147483640

#define pi acos(-1.0)

#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

using namespace std;

const int maxn=300010;

int a[maxn],tr[maxn][2],fa[maxn],size[maxn],val[maxn],rev[maxn];

int n,ans,rt;

void rotate(int x,int &k)

void splay(int x,int &k)

rotate(x,k); }}

void pushdown(int k)

int find(int k,int x)

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

} printf("%d",ans);

return 0;

}

codevs1743 反轉卡片

1743 反轉卡片 時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題解題目描述 description dzy493941464 yywyzdzr原創 小a將n張卡片整齊地排成一排,其中每張卡片上寫了1 n的乙個整數,每張卡片上的數各不相同。比如下圖是n 5的一種情況...

code vs 1743 反轉卡片(splay)

時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題解 檢視執行結果 dzy493941464 yywyzdzr原創 小a將n張卡片整齊地排成一排,其中每張卡片上寫了1 n的乙個整數,每張卡片上的數各不相同。比如下圖是n 5的一種情況 3 4 2 1 5 接下來你需要按小...

Codevs 1743 反轉卡片 splay

1743 反轉卡片 時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題目描述 description dzy493941464 yywyzdzr原創 小a將n張卡片整齊地排成一排,其中每張卡片上寫了1 n的乙個整數,每張卡片上的數各不相同。比如下圖是n 5的一種情況 3...