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大的數。
例如:a:1 2 3,b:2 3 4。a與b組合成的c包括2 3 4 4 6 8 6 9 12共9個數。
input
第1行:2個數n和k,中間用空格分隔。n為陣列的長度,k對應第k大的數。(2 <= n <= 50000,1 <= k <= 10^9)output第2 - n + 1行:每行2個數,分別是a[i]和b[i]。(1 <= a[i],b[i] <= 10^9)
輸出第k大的數。input示例
3 2output示例1 22 3
3 4
9思路:只要我們在所在答案的範圍內找到小於答案的個數cnt,然後用k去和cnt比較(這裡是求第k大 我們把陣列從小到大排序 把k轉換為k大前有多少個數比k小 用kt = n*n-k+1來表示 )
**:
#include #include #include using namespace std;
typedef long long ll;
const int maxn = 5e+5;
ll a[maxn],b[maxn];
int main()
sort(a+1,a+n+1);
sort(b+1,b+n+1);
k = n*n-k+1;
ll l=a[1]*b[1];
ll r=a[n]*b[n];
ll ans=0,cnt;
while(l+1>1;
// cout<=0;)
}cnt+=j;
}if(cnt>=k){
ans = mid;
//cout<
1105 第K大的數
陣列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大的數。例如 a 1 2 3,b 2 3 4。a與b組合成的c包括2 3 4 4 6 8 6 9 12共9個數。...
1105 第K大的數
陣列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大的數。例如 a 1 2 3,b 2 3 4。a與b組合成的c包括2 3 4 4 6 8 6 9 12共9個數。...
51Nod 1105 第K大的數
acm模版 這裡使用二分套二分查詢即可。一般的二分查詢是通過下標範圍查詢,而二分套二分是為了求兩個陣列組合乘積的問題,查詢第k大的值,這裡我們需要通過資料的範圍查詢,而不是下標的範圍,這裡需要兩次快排。需要強調的一點是資料範圍問題!一定要使用long long型,避免資料溢位!include inc...