1. 程式人生 > 其它 >正睿2021國慶集訓 Day1

正睿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\)

。求最終答案。\(|S|,\sum |T_i|\le 10^5\)

可以用 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