51Nod 1105 第K大的數

2021-07-16 23:52:28 字數 1036 閱讀 2284

acm模版

這裡使用二分套二分查詢即可。一般的二分查詢是通過下標範圍查詢,而二分套二分是為了求兩個陣列組合乘積的問題,查詢第k大的值,這裡我們需要通過資料的範圍查詢,而不是下標的範圍,這裡需要兩次快排。

需要強調的一點是資料範圍問題!!!一定要使用long long型,避免資料溢位!!!

#include 

#include

#include

/* * 二分套二分

* 陣列a同陣列b組合乘積,二分查詢第k大

*/typedef

long

long ll;

using

namespace

std;

const

int maxn = 5e4 + 10;

ll n, k;

ll a[maxn];

ll b[maxn];

// 查詢小於x的元素個數

ll check(ll x)

else

}ans += j;

}return ans;

}int main(int argc, const

char * argv)

sort(a + 1, a + n + 1);

sort(b + 1, b + n + 1);

ll ans = 0;

ll key = n * n - k + 1;

ll low = a[1] * b[1]; // 初始最小值

ll high = a[n] * b[n]; // 初始最大值

while (high - low > 1)

else

}cout

<< ans << '\n';

return

0;}

《二分查詢》

51nod 1105 第K大的數

1105 第k大的數 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 陣列a和陣列b,裡面都有n個整數。陣列c共有n 2個整數,分別是a 0 b 0 a 0 b 1 a 1 b 0 a 1 b 1 a n 1 b n 1 陣列a同陣列b的組合 求陣列c中第k大的數...

51nod 1105第K大的數

1105 第k大的數 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 陣列a和陣列b,裡面都有n個整數。陣列c共有n 2個整數,分別是 a 0 b 0 a 0 b 1 a 0 b n 1 a 1 b 0 a 1 b 1 a 1 b n 1 a n 1 b 0 a ...

51nod 1105 第K大的數

1105 第k大的數 1.0 秒 131,072.0 kb 20 分 3級題 陣列a和陣列b,裡面都有n個整數。陣列c共有n 2個整數,分別是 a 0 b 0 a 0 b 1 a 0 b n 1 a 1 b 0 a 1 b 1 a 1 b n 1 a n 1 b 0 a n 1 b 1 a n 1 ...