有乙個n
階方陣,方正中第i
行第j
列的元素值為\(d_=i^+1e5*i+j^-1e5*j+i*j\),我們需要找出這個方陣中第m
小的元素值。
分析這個公式,我們發現:當j
固定的時候,這個公式關於i
(取值範圍:從0
到n
)是單調增加的,所以這裡我們可以二分乙個答案,然後一列一列的找小於(等於)它的個數,這樣加起來我們就能知道我們列舉的這個答案是第幾小了。
需要注意的是,第乙個最外層的二分有點不同,因為我們二分的答案可能不存在,但是也是符合第m
小,這個情況還是需要注意的,這裡需要參看關於二分的第四種形式。二分鏈結
#include#include#include#include#include#include#include#include#includetypedef long long ll;
using namespace std;
const double esp=1e-6;
const int inf=0x3f3f3f3f;
const int maxn=1e6+7;
ll n, m;
ll fun(ll i, ll j)
void dis()
printf("\n"); }}
ll solve(ll value)
if(left!=0)
sum+=left-1;
} return sum;
}int main()
else lt=mid;
} printf("%lld\n", ans);
} return 0;
}
POJ 3685(Matrix,二分搜尋)
題意 給定乙個 n n矩陣,其中aij i2 100000 i j 2 100000 j i j。求矩陣中第 k大的數。題解 自然的想法還是算出來所有的 aij,排序,然後二分找第 k大的數,時間複雜度又來打了o n2 肯定會超時。注意觀察aij i2 100000 i j 2 100000 j i...
poj 3685 Matrix 二分套二分
題意 說的很明確了。思路 很經典的二分套二分,通過觀察表示式我們可以發現當j一定的時候,原表示式的值是跟i相關並且是單調的,所以我們可以二分答案m,然後統計比m小的數有多少個,在統計的時候需要先列舉j,然後再二分i,統計完成後,還需要判斷這個結果是否存在 即是否存在i,j使表示式的值等於m 為此我的...
POJ3685Matrix 二分套二分
傳送門 題目大意 n n的矩陣,a i j i i 100000 i j j 100000 j i j,求矩陣中第k小。n 5 10 4 題解 打個表,發現每一列從上往下單調遞增。在大範圍內二分搜尋,二分第k小為x,然後再二分找矩陣中有多少個比x小的數。include include include...