BZOJ1493 NOI2007 項鍊工廠

2022-04-28 22:24:13 字數 1249 閱讀 1868

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公司打算推出一款項鍊自助生產系統,使用該系統顧客可以自行設計心目中的美麗項鍊。該項鍊自助生產系 統包括硬體系統與軟體系統,軟體系統與使用者進...