正睿2021國慶集訓 Day1
BZOJ 5102
把所有區間按左端點從小到大排序。列舉每個區間 \(i\),考慮此時區間的交以這個區間的左端點為開始,那麼就要詢問 \(1\dots i\) 的所有區間中,右端點的第 \(k\) 大值。對頂堆或者樹狀陣列倍增即可。
左偏樹
哈夫曼樹
https://www.cnblogs.com/alan-zhao-2007/p/p2168-sol.html
BZOJ 4240
從大到小考慮所有元素:對於一個元素 \(x\),設最小的那個比它大的元素為 \(y\),那麼它一定被放在 \(y\) 的旁邊。如果 \(x\) 在原陣列中右邊比它大的數的個數小於左邊的,那麼 \(x\) 應該放在 \(y\) 的左邊;否則放在右邊。
並查集
按秩合併的並查集,其樹高是 \(\log\) 級別的。
因此我們可以用按秩合併來計算兩個點最早被合併的時間:對每個邊記錄它出現的最早時間,取這兩個點之間路徑上邊的 \(\min\) 即可。
BZOJ 5143
BZOJ 4028
P4108
https://www.cnblogs.com/alan-zhao-2007/p/p4108-sol.html。
無向圖三元環計數
我曾經聽懂了,但現在忘了。
某根號分治題
題意:給定串 \(S\),其中每個位置有權值 \(a_i\)。若干次詢問,每次給定一個串 \(T_i\),若 \(T_i\) 在 \(S\) 中 \(p\) 位置出現,則答案加上 \(a_p\)
可以用 SAM 和線段樹合併做,但這不是聯賽內容。
若 \(|T|\le \sqrt{|S|}\),則在 \(S\) 中暴力查詢它即可。
否則,只有至多 \(\sqrt{|S|}\) 種 \(T\),對每種做一次 kmp 即可。
某並查集題
題意:給定一張 \(n\times m\) 的方陣,每個位置可以是空地或者牆。\(q\) 次操作,每次在某個位置加上一塊牆,然後問從最底下一行能否到達最頂上一行。保證最底下一行沒有牆,強制線上。\(1\le n,m\le 2000,1\le q\le 10^6\)。
如果不強制線上,倒著做就行了。
考慮將最左邊一列與一個虛點連邊,最右邊一列與另一個虛點連邊。加一塊牆,就相當於這個新加的點與周圍四個點中有牆的連邊。這樣,當兩個虛點連通時,就說明不能到達了。
Written by Alan_Zhao