blog。沒題解就來寫一篇捏。
顯然 \(L_i>R_i\) 的人都想去左邊(記為 LFT 人),\(L_i<R_i\) 的人都想去右邊(記為 RHT 人),\(L_i=R_i\) 的人可以擺爛。
(LFT 人與 RHT 人互相干擾,很難刻畫。於是找性質。)
存在最優方案,使得所有 LFT 人都在 RHT 人的左邊。證明:如果有 RHT 人在 LFT 人的左邊,交換兩人不會使答案更劣。
即:假設有 \(x\) 個 LFT 人,那麼 \(1\sim x\) 的位置全是 LFT 人,\(x+1\sim N\) 的位置全是 RHT 人。
於是可以分開考慮 LFT 人與 RHT 人了!下文將只考慮 LFT 人。
先令初始答案為 \(\sum R_i\),然後再看有多少個 LFT 人能從 \(R_i\) 調整成 \(L_i\)。記 \(v_i=L_i-R_i\),只需解決如下問題:
如果第 \(i\) 個元素在前 \(K_i\) 個元素中,那麼會獲得 \(v_i\) 的價值。求出最大價值。
這個就是入門貪心了,按 \(v_i\) 排序後貪心放置即可,可以用 set / priority_queue 模擬。當然也可以反悔貪心(
code,時間複雜度 \(O(n\log n)\)。