bzoj
luogu
這才叫一眼題不接受任何形式的反駁。
對於前兩種操作,肯定是維護全域性是否被翻轉,以及全域性順時針旋轉了多少。
後面的都是線段樹基本操作。
記得如果存在\(rev\)標記,在讀入了\(x,y\)之後要把它們\(swap\)。
最後一種操作,答案就是t[1].num-(t[1].lc==t[1].rc)
嗎?全部是乙個顏色?
所以答案和\(1\)取個\(\max\)就可以了。
#include#includeusing namespace std;
int gi()
const int n = 5e5+5;
struct datat[n<<2];
int n,m,rev,delta,tag[n<<2];
char opt[10];
data operator + (data a,data b)
void build(int x,int l,int r)
int mid=l+r>>1;
build(x<<1,l,mid);build(x<<1|1,mid+1,r);
t[x]=t[x<<1]+t[x<<1|1];
}void cover(int x,int v)
void pushdown(int x)
void modify(int x,int l,int r,int ql,int qr,int v)
pushdown(x);int mid=l+r>>1;
if (ql<=mid) modify(x<<1,l,mid,ql,qr,v);
if (qr>mid) modify(x<<1|1,mid+1,r,ql,qr,v);
t[x]=t[x<<1]+t[x<<1|1];
}data query(int x,int l,int r,int ql,int qr)
int pos(int x)
int main()
else if (opt[0]=='f') rev^=1;
else if (opt[0]=='s')
else if (opt[0]=='p')
else if (opt[0]=='c'&&opt[1]=='s')
else printf("%d\n",max(1,t[1].num-(t[1].lc==t[1].rc)));
} return 0;
}
BZOJ1493 NOI2007 項鍊工廠
原題位址 又是一道資料結構神題,卡了一晚上 寫一下其中幾個寫搓的地方 1.update 時要clear 左右子樹 2.查詢完之後要記得把樹merge 回去 3.交換操作那裡,若i,j相等則直接退出,要不然會出錯 4.染色 查詢操作l r和l r時split 的範圍不同 update split 函式...
bzoj1493 NOI2007 項鍊工廠
維護全域性移動量什麼的後可以上線段樹。思維難度低一點的做法是直接splay。適合我這種腦殘選手 f操作就是把2 n翻轉。r操作就是把後面k個元素插到最前面來。維護顏色段是老套路了。比較坑的是。多加倆邊界節點的話,需要考慮有沒有可能對答案造成影響。然而邊界節點不可能在合併子區間的時候造成干擾。而且p操...
BZOJ 1493 NOI2007 項鍊工廠
bzoj 1493 noi2007 項鍊工廠 splay t公司是一家專門生產彩色珠子項鍊的公司,其生產的項鍊設計新穎 款式多樣 適中,廣受青年人的喜愛。最近t公司打算推出一款項鍊自助生產系統,使用該系統顧客可以自行設計心目中的美麗項鍊。該項鍊自助生產系 統包括硬體系統與軟體系統,軟體系統與使用者進...