2024.10.[2, 3]訓練記錄

docx君發表於2024-10-03

10.2上午noip模擬

比賽是8:00開始的,人是8:40起床的。

T1

猜了結論,秒了。
結論是,一開始按照倒序排,連續是 \(1\) 的段 \(reverse\) 成正序。這樣逆序對最多。
感覺做法太簡單 \(O(n \log n)\) 肯定不放。於是想了 \(O(n)\) 做法。
最開始有 \(\dfrac{n*(n-1)}{2}\) 個逆序對,按段考慮貢獻。就是 \(O(n)\)

後記:\(O(n \log n)\) 放了,輸。

10.3晚上訂正

回校,死。
今天cs版本更新我沒更。一天沒玩。表揚自己。

T3

考場打完T1去cs了。沒看T3。
考慮容斥。
按最終答案裡最大值的歸屬來討論。
注意到,統計的是最後那個取過最大值的三元組的個數。
所以考慮方案時最多考慮選 \(3\) 個。(選完 \(3\) 個決出 \(max\) 的話再選就沒用。)

最大值來自於 \(1\) 個三元組時:
\(n\) 箇中選出這一個,\(n\) 種。

最大值來自於 \(2\) 個三元組時:
先選出來兩個,方案數 \(C(n, 2)\)
設選的為第 \(i,j\) 個。
於是當 \(a_i < a_j, b_i < b_j, c_i < c_j\) 時,相當於只選了 \(j\),和第一種情況算重。
於是減去所有的三位偏序個數。

最大值來自於 \(3\) 個三元組時:
選出三個的方案是 \(C(n, 3)\)
當且僅當最後的最大值來自於一或兩個三元組時算重。
這時,這一或兩個三元組中必有一個取到的最大值個數 \(\geq 2\)。(及最後三元組的三個值中有不少於兩個值來自這個三元組。)
列舉這個三元組下標 \(p\)。設另外兩個是 \(i,j\)
當最大值取到 \(a, b\) 這兩個位置時。
\(a_i < a_p, a_j < a_p\)
\(b_i < b_p, b_j < b_p\)
這是個二維偏序。
把這個數量減掉,再減掉\(ac、bc\)的情況。
這時發現,滿足三維偏序的情況被多減了兩次,加回來即可(可複用第二種情況求過的三位偏序)。
最後全部求和就是總方案數。

相關文章