這篇文章參考了神仙duy
iduyi
duyi
的題解。個人認為他的那篇文章寫得比這篇還要好,可以去看看他的這篇題解;如果看不懂的話 ,就來看看我的。
sto duyi orz!!!
duyi ddjxd!
求乙個序列的所有連續區間的mex
mexme
x的me
xmex
mex。
首先,看到本題,我們不難想到三個思考方式:
①直接從mex
mexme
x的me
xmex
mex入手,挖性質;
②從m ex
mexme
x入手,擴充套件到mex
mexme
x的me
xmex
mex;
③拆分這兩個mex
mexme
x。從①入手,似乎並沒有什麼用。
從②入手呢?很顯然,mex
mexme
x就是乙個區間中最小的,沒有出現的數。
從③入手呢?結合②,我們似乎完成了乙個轉化:
⌊
\lfloor
⌊ 對於每乙個值x
xx,我們要判斷是否存在乙個區間的mex
mexme
x等於x
xx。 ⌉
\rceil
⌉ 我們從1
11到n+1
n+1n+
1列舉每乙個x
xx,如果不存在這樣的區間使得它的mex
mexme
x等於x
xx,那麼就直接輸出x
xx並結束即可。
現在的難點,在於如何判斷是否存在乙個區間的mex
mexme
x等於xxx。
再重複一遍mex
mexme
x的定義: mex
mexme
x就是乙個序列中最小的未出現的數。
即,乙個區間的mex
mexme
x如果要等於x
xx,需要滿足兩個要求:
①這段區間沒有xxx;
②這段區間有1,2
,3……
,(x−
1)
1,2,3……,(x-1)
1,2,3…
…,(x
−1)。
我們需要以①,②中的乙個為條件,另乙個為要求去尋找這樣的區間。
我們考慮以更加簡單達到的①為條件。我們找出所有x
xx(可以預處理),可以發現任意兩個x
xx均不能出現在同乙個區間中。
為了滿足②,可以發現乙個「單調性」:如果乙個區間有1
11到x−1
x-1x−
1這些數,那麼它的子區間不一定有;如果它的子區間有,那麼它一定有。
所以,我們對於劃分出來的這些區間,分別求一下mex
mexme
x即可。如果這些mex
mexme
x都不等於x
xx,那麼這些大區間的子區間顯然都無法滿足要求。
可以發現,對於不同的x
xx,劃分出來的區間的數量的級別只有n
nn。於是,我們只需要完成下面這種操作: ⌊
\lfloor⌊nn
n次查詢一段區間的mex
mexme
x⌉\rceil
⌉。對於這種查詢一段區間的mex
mexme
x的題目,我們有乙個套路:莫隊。
然後,每次我們單點修改(add/delete),區間查詢mex
mexme
x的時候直接線段樹上二分即可。
修改的時間複雜度是o(n
nlogn
)o(n \sqrt n \log n)
o(nn
logn)
,查詢的時間複雜度為o(n
logn)
o(n \log n)
o(nlogn)
,總時間複雜度為o(n
nlogn
)o(n \sqrt n \log n)
o(nn
logn)
。由於資料範圍是n≤1
05
n≤10^5
n≤10
5,無法通過。
可以發現,修改操作足足有n
nn \sqrt n
nn個,而查詢操作只有o(n
)o(n)
o(n)
個。但是,用線段樹做修改與查詢操作都是單次log
\log
log級別的,那我們能不能「犧牲查詢的複雜度,來優化修改操作的複雜度」呢?
答案是可以的,分塊可以搞定。對於每次修改,由於是單點的,我們直接o(1
)o(1)
o(1)
打上標記即可;對於一次查詢,我們掃一遍所有的塊,如果這一塊沒有被填滿,顯然mex
mexme
x的值在這一塊內;然後我們暴力掃瞄一下這一塊即可。
單次修改的複雜度為o(1
)o(1)
o(1)
,單次查詢的複雜度為o(n
)o(\sqrt n)
o(n)。
總時間複雜度o(n
n)
o(n \sqrt n)
o(nn)
,本題被完美解決。
毫無疑問,這是一道絕世好題。而duy
iduyi
duyi
巨佬能切掉這題,足見他之神仙;而我卻冥思苦想1h1h
1h,只想到了第乙個par
tpart
part
中的東西,足見我有多菜。
我們從mex
mexme
x的定義本身,考慮轉化為「查詢是否存在乙個區間的mex
mexme
x等於x
xx」,又通過貪心的決策包容性,轉化為了「查詢一段區間的mex
mexme
x」,緊接著使用經典的莫隊套權值線段樹上二分來得到了本題的「正解」,可惜時間複雜度多了乙個log
\log
log。最後,根據乙個套路,我們考慮到了「根號平衡」,即對於「修改與查詢不平均」的問題都可以考慮下分塊是否可以優化。
dylstxdy!
咕咕咕
膜拜神牛 LIS
在n nn個二元組 ai bi a i,b i ai b i 中選擇若干個,使得被選擇的任意兩個二元組i,j i,ji,j均不滿足ai aj a i leq a j ai aj 且bi b jb i leq b j bi bj 考慮把一維為關鍵字公升序排序,這樣就轉變成另一維的lis lisli s...
膜拜神牛 LIS
在nn 個二元組 ai bi ai bi 中選擇若干個,使得被選擇的任意兩個二元組i,j i,j均不滿足ai ajai aj 且bi bjbi bj 考慮把一維為關鍵字公升序排序,這樣就轉變成另一維的lis lis問題了。但是需要考慮其中一維關鍵字相同時的情況。顯然此時將另一位降序排列即可。incl...
nssl 1336 膜拜神牛
d es crip tion description descri ptio n 給定長度為n nn的序列a aa和b bb,若滿足ai aj a i geq a j ai aj 且bi b jb i leq b j bi bj 則i,ji,j i,j互相膜拜,求最大的互不膜拜集合 資料範圍 n 1...