維護全域性移動量什麼的後可以上線段樹。
思維難度低一點的做法是直接splay。。(適合我這種腦殘選手
f操作就是把2~n翻轉。r操作就是把後面k個元素插到最前面來。維護顏色段是老套路了。。。
比較坑的是。。多加倆邊界節點的話,需要考慮有沒有可能對答案造成影響。。
然而邊界節點不可能在合併子區間的時候造成干擾。。
而且p操作的時候,選出來的子區間裡也不會包含邊界節點。。所以根本不用擔心》_<
1 #include2 #include3 #include4view codeusing
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 }
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公司打算推出一款項鍊自助生產系統,使用該系統顧客可以自行設計心目中的美麗項鍊。該項鍊自助生產系 統包括硬體系統與軟體系統,軟體系統與使用者進...