LOJ #2393. 「JOISC 2017 Day 2」門票安排 [思維,貪心]


好神啊 /kk

思路

可以證明, swap(A,B) 不會對答案造成任何影響,而如果每個人走的路徑確定是 \(A \to B\)\(A \to 1 \to n \to B\) ,那么答案就是一條邊被覆蓋的次數的最大值。

為了方便,把題意換一下,變成每個人覆蓋一些點, \([l,r]\)\([1,l)+(r,n]\)

先讓所有人都覆蓋 \([l,r]\) ,然后反轉一個人,帶來的變化就是 \([l,r]--, [1,l)++, (r,n]++\)

容易發現如果兩個被反轉的人的 \([l,r]\) 無交,那么一定不優。

所以會存在一個點,使得每個被反轉的區間都經過這個點。

設被反轉的區間的交是 \([x,y]\) ,一開始每個點被覆蓋的次數是 \(a_i\) ,反轉后每個點被覆蓋的次數是 \(b_i\) ,令 \(t\)\([x,y]\)\(b\) 最大的位置。

性質 1 :存在最優方案使得 \(b_t \ge \max b_i - 1\)

證明:如果 \(b_t \le \max b_i - 2\) ,那么同時取消反轉一個 \(l=x\)\(r=y\) 的區間, \(b_t\) 會增加,且答案不會更劣。

性質 2 :存在最優方案使得 \(a_t = \max a_i\)

證明:如果存在 \(a_k > a_t\) ,那么顯然 \(k \notin [x,y]\) (否則 \(b_t\) 就不是 \([x,y]\) 中最大的),所以至少會有一個區間沒有覆蓋 \(k\) ,所以有 \(a_k-b_k \le a_t-b_t-2\) ,化簡得 \(b_k-b_t \ge 3\) ,與性質 1 矛盾。

性質 3 :對於所有 \(a_k = \max a_i\)\(k \in [l,r]\)

證明:和性質 2 差不多。

所以我們可以確定一個所有反轉的區間都經過的位置 \(t\) ,且知道最終答案就是 \(b_t\)\(b_t+1\)

二分答案,判斷 \(w\) 是否可行。

\(cnt\) 為反轉的區間個數,那么由於 \(w=b_t=a_t-cnt\)\(w=b_t+1=a_t-cnt+1\) ,所以只需要分別判一下 \(cnt=a_t-w(+1)\) 即可。

為什么強行定了 \(cnt\) 仍然滿足二分性呢?如果 \(w\) 過大,那么 \(cnt\) 過小,那么就把最優解中反轉的區間刪掉一些即可。顯然刪掉之后仍然滿足上面三條性質。

\(1\)\(t\) 貪心,貪心到 \(i\) 的時候把所有還沒有反轉且 \(l \le i, r \ge t\) 的區間按 \(r\) 加入大根堆中,而 \(i\) 會對前綴選的區間個數有一個限制(至少是多少),就貪心地在大根堆里面補齊即可。

限制長得像這樣: \(a_i-x+(cnt-x) \le w\) 。特別地, \(i=t\) 時令 \(x=cnt\)

貪心結束后再掃一遍判是否合法即可。貪心正確性比較顯然。

復雜度 \(O(n \log^2 n)\)

代碼

咕了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM