51nod 1105第K大的數

2021-08-23 12:04:14 字數 1143 閱讀 8047

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[n - 1] * b[1]  ......  a[n - 1] * b[n - 1]

是陣列a同陣列b的組合,求陣列c中第k大的數。

例如:a:1 2 3,b:2 3 4。

a與b組合成的c為

a[0]  a[1]  a[2]

b[0]     2      3      4

b[1]     4      6      8

b[2]     6      9     12

共9個數。

input

第1行:2個數n和k,中間用空格分隔。n為陣列的長度,k對應第k大的數。(2 <= n <= 50000,1 <= k <= 10^9)

第2 - n + 1行:每行2個數,分別是a[i]和b[i]。(1 <= a[i],b[i] <= 10^9)

output

輸出第k大的數。
input示例

3 2

1 22 3

3 4

output示例

9
先開始想的二分排序,可是陣列開不到那麼大...然後網上搜的,直接對a,b排序,二分中的二分就行了

#include#include#define maxn 50005

#define ll long long

using namespace std;

ll a[maxn];

ll b[maxn];

ll n;

ll judge(ll x)

else break;

}ans+=j;

}return ans;

}int main()

else

}cout<

return 0;

}

51Nod 1105 第K大的數

acm模版 這裡使用二分套二分查詢即可。一般的二分查詢是通過下標範圍查詢,而二分套二分是為了求兩個陣列組合乘積的問題,查詢第k大的值,這裡我們需要通過資料的範圍查詢,而不是下標的範圍,這裡需要兩次快排。需要強調的一點是資料範圍問題!一定要使用long long型,避免資料溢位!include inc...

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