bzoj1493 NOI2007 項鍊工廠

2022-03-30 13:43:20 字數 1674 閱讀 9570

維護全域性移動量什麼的後可以上線段樹。

思維難度低一點的做法是直接splay。。(適合我這種腦殘選手

f操作就是把2~n翻轉。r操作就是把後面k個元素插到最前面來。維護顏色段是老套路了。。。

比較坑的是。。多加倆邊界節點的話,需要考慮有沒有可能對答案造成影響。。

然而邊界節點不可能在合併子區間的時候造成干擾。。

而且p操作的時候,選出來的子區間裡也不會包含邊界節點。。所以根本不用擔心》_<

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=500233;6

int ch[maxn][2

],fa[maxn],lc[maxn],rc[maxn],num[maxn],sz[maxn],col[maxn];

7bool

rev[maxn],cov[maxn];

8int

i,j,k,n,m,x,y,rt,tot;

9char s[23

];10

11int ra;char

rx;12 inline int

read()

1718 inline void pushdown(int

x)27

if(rev[x])32}

33 inline void upd(int

x)45 inline void rotate(int

x)52 inline void splay(int &rt,int

x)60

upd(x);61}

6263 inline int find(int x,int

k)70 inline void run_r(int

k)78 inline void

run_f()

84 inline void run_s(int i,int

j)91 inline void run_p(int i,int j,int

k)else

106}

107 inline int

query_c()

113 inline int query_cs(int i,int

j)else

130}

131132 inline void build(int &x,int a,int b,int

f)137

int mid=(a+b)>>1

;138 build(ch[x][0],a,mid-1

,x);

139if(mid>1&&mid2)col[x]=read();

140 build(ch[x][1],mid+1

,b,x);

141 upd(x);//

printf("%d--%d %d\n",a-1,b-1,num[x]);

142}

143/*

inline void dfs(int x)

*/153

154155

intmain()

171//

dfs(rt);printf("!!! %d %d\n",rt,sz[rt]);

172return0;

173 }

view code

BZOJ1493 NOI2007 項鍊工廠

原題位址 又是一道資料結構神題,卡了一晚上 寫一下其中幾個寫搓的地方 1.update 時要clear 左右子樹 2.查詢完之後要記得把樹merge 回去 3.交換操作那裡,若i,j相等則直接退出,要不然會出錯 4.染色 查詢操作l r和l r時split 的範圍不同 update split 函式...

BZOJ1493 NOI2007 項鍊工廠

bzoj luogu 這才叫一眼題不接受任何形式的反駁。對於前兩種操作,肯定是維護全域性是否被翻轉,以及全域性順時針旋轉了多少。後面的都是線段樹基本操作。記得如果存在 rev 標記,在讀入了 x,y 之後要把它們 swap 最後一種操作,答案就是t 1 num t 1 lc t 1 rc 嗎?全部是...

BZOJ 1493 NOI2007 項鍊工廠

bzoj 1493 noi2007 項鍊工廠 splay t公司是一家專門生產彩色珠子項鍊的公司,其生產的項鍊設計新穎 款式多樣 適中,廣受青年人的喜愛。最近t公司打算推出一款項鍊自助生產系統,使用該系統顧客可以自行設計心目中的美麗項鍊。該項鍊自助生產系 統包括硬體系統與軟體系統,軟體系統與使用者進...