一道線性掃描題

T2

給你一個n*m的矩陣,R=每一行最小值的最大值,C=每一列最大值的最小值,求最少修改多少數使R=C。
1 ≤ n, m ≤ 2, 000,0 ≤ Ai, j ≤ 1000,000

分析

呃。。。這題其實我用了一個fkcdalao講的玄學方法。。。正解O(n*m)不過很麻煩。。。於是。。。蒟蒻打了一個卡過的排序+二分O(n*mlogn)。。。
好像還能用堆和線段樹等等奇怪的方法,不過數據結構貌似都被卡了,開了O2後排序+二分很穩。。。


沒錯上面的都是廢話
1、對每一行從小到大排序,f1取排序後每一列最大值
2、對每一列從大到小排序,f2取排序後每一行最小值
3、枚舉R=C=x,容易發現x一定在矩陣中出現過否則不是最優
4、二分找有幾個f1中最大值比x小,幾個f2中的最小值比x大,加起來爲x的答案
(這裏需要特判一下,因爲如果x是最大(小)的,並且x沒有出現在矩陣中過,那麼答案不是0而是1)

Code

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章