1. 程式人生 > >NOI.ac第五套題解

NOI.ac第五套題解

題解

排隊

20% 1n20,1x,hi201\le n\le 20, 1\le x,h_i\le 20 隨便暴力

50% 1n2000,1x,hi1e91\le n \le 2000, 1\le x,h_i\le 1e9 列舉把哪個定成中位數

100% 1n2e5,1x,hi1e91\le n\le 2e5,1\le x,h_i\le 1e9

先把高度排序。貪心地修改。最好的方法是把最中間的人變成xx。那麼就把左邊比他高的或者右邊比他矮的都改成xx就好啦。

翹課

10% 2n,m500,k=1

2\le n,m\le 500,k=1

20% 2n,m200000,k=12\le n,m\le 200000,k=1 暴力

40% 2n,m2000,k=22\le n,m\le 2000,k=2 找環

70% 2n,m2000,k<n2\le n,m\le 2000,k<n 每次跑點判斷

100% 2n,m200000,1k<n2\le n,m\le 200000,1\le k <n 倒著刪

考慮先把所有邊加進去,再倒過來刪邊。

對於每個點,我們考慮要不要刪掉它,刪掉它表示它連線著選中的點的度小於 K 了。刪完它之後我們把它鄰居的度都–,然後再看它的鄰居要不要被刪掉。這樣預處理把每個點判一次要不要刪。

之後刪一條邊也是刪完就判斷連線的兩個點需不需要被刪掉。因為每個點只會被刪一次,所以整體還是O(n)的。

題目做法可能多樣,但思路應該都是倒過來。

運氣大戰

20% n10,q10n\le 10,q\le 10 暴力

另30% n1000,q100n\le 1000,q\le 100 這個點我也不記得為什麼放了,但看起來很多人只拿到了50所以可能還是有點意義的?

另20% n30000,q500n\le 30000,q\le 500 nq 的 dp

100% 2n30000,1q10000,1wi,ri1e6,1ai̸=bin2\le n\le 30000,1\le q\le 10000,1\le w_i,r_i \le 1e6,1\le a_i\not=b_i \le n

由於排序不等式,我們儘量想順序放。兩邊都排序。

由於 n 個不能配的干擾,又不能完全順序放。

有個結論,最後匹配出第 i 個人的運氣值是第 j 個的話,ij2|i-j|\le2。這個結論從最小化逆序對的個數來看,自己把附近幾個線連起來畫一畫證明一下。

這樣就可以用 dp[i]表示到 i 為止所有配好的最優答案。計算的時候需要用到前三輪的答案然後討論一下。這個是 O(nq)的,可以過70%。

用線段樹記錄區間答案。區間記錄這樣的資訊:把這個區間前0-2個和後0-2個元素去掉的答案,用3x3的矩陣維護。這樣複雜度是O(qlogn)。