1. 程式人生 > 其它 >2021/11/17 & 2021/11/18 集訓補題

2021/11/17 & 2021/11/18 集訓補題

/kk,要退役了,最後2天還是象徵性地記錄一下考試補題吧。/kk

2021/11/17 T1 春節十二響

link

Solution

考試的時候想了1個半小時,感覺自己智商下降地越來越快了。/kk

我們發現我們直接樹上啟發式合併就做完了,因為子樹之間互不影響,而你子樹的根也不能和子樹內的點放在一起。

複雜度是 \(\Theta(n\log^2 n)\) 的。

2021/11/17 T3 Severus

link

Description

有一個 \(n\) 的個點的樹,有 \(m\) 次操作,每次為以下兩種之一(集合為可重集):

  • \(u\to v\) 的路徑上的每個點的集合都加入 \(w\)

  • 求給出 \(k\)

    個點虛樹上所有點的集合的並的權值之和。

\(n,m\le 10^5,\sum k\le 5\times 10^5\)

Solution

很愚蠢,但是我又沒有看出來。/kk 真的要退役了

我們可以發現的是,兩個路徑的交點一定包含兩者中的一個 lca,然後我們就做完了。注意 \(\sum k\) 只能帶一隻 \(\log n\)

umi

link

Description

定義一個序列為好的,當且僅當一個顏色都在同一個段裡面。

給你一個序列,每次操作你可以將某顏色 在序列上的所有位置改成另一顏色,使得最終序列是好的。

我們定義代價為最終序列與原序列不同的位置數量(不是操作次數)。

\(T\) 次詢問,每次將一個位置進行修改,問修改後的答案。

\(n\le 2\times 10^5\)

Solution

我們發現對於顏色 \(c\) 求出出現左端點 \(l_c\),出現右端點 \(r_c\),那麼區間 \([l_c,r_c]\) 必定被染成相同顏色。

我們設 \(b_i\)\(i,i+1\) 都被 \([l_c,r_c]\) 都被包含的 \(c\) 的個數。那麼 \(b_i=0\) 的時候 \(i\) 一定是一個相同顏色區間的右端點。而一個區間的貢獻就是大小減去出現次數最多的顏色的出現個數。前者綜合為 \(n\),我們直接求後者即可。

我們將 \([l_c,r_c]\)\(c\) 的出現個數賦值到 \(l_c\) ,那麼,一個區間的貢獻就是區間值的最大值,也即是說,我們求出 \(b_i=0\)

的兩者之間的最大值之和即可。

考慮怎麼維護,實際上我們可以維護區間 \(b_i\) 最小值,值的最大值,最左邊最小值及左的值的最大值,最右邊最小值及右的值的最大值,以及會產生的貢獻和。

複雜度 \(\Theta(n\log n)\) 的。