poj 3685 二分套二分

2021-07-04 06:51:01 字數 1277 閱讀 1459

題意:

給乙個n * n 的矩陣, 其中每個元素的大小為:

i * i + 100000 * i + j * j - 100000 * j + i * j

現在給n和m,求這個矩陣中第 m 大的元素是什麼。

解析:發現上面那個式子是按照,每一列,從小到大遞增的。

所以可以先二分設定乙個mi元素,然後按照每一列來二分統計比它小的元素有多少個。

如果比它小的元素個數大於m,則說明原來設定的元素mi太大;

反之,原來設定的元素太小。

開始的時候wa了,從討論區找了幾組資料,然後發現n和m沒開ll。。。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #define ll long long

using namespace std;

const int inf = 0x3f3f3f3f;

const double eps = 1e-8;

const double pi = acos(-1.0);

const double ee = exp(1.0);

const int maxn = 50000 + 10;

ll n, m;

ll cal(ll i, ll j)

bool ok(ll d)

cnt += lo;

}return cnt < m;

}int main()

printf("%lld\n", lo);

}return 0;}/*

1050000 2500000000

48888 2000000000

47777 1500000000

46666 1200000000

45555 1000000000

44444 900000000

43333 800000000

42222 700000000

41111 600000000

40000 500000000

7500000000

5129139981

3273537711

2261727633

1634929103

1368488613

1096871427

820144979

538443492

251994213

*/

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...

POJ 3685 Matrix 二分套二分

有乙個n階方陣,方正中第i行第j列的元素值為 d i 1e5 i j 1e5 j i j 我們需要找出這個方陣中第m小的元素值。分析這個公式,我們發現 當j固定的時候,這個公式關於i 取值範圍 從0到n 是單調增加的,所以這裡我們可以二分乙個答案,然後一列一列的找小於 等於 它的個數,這樣加起來我們...