【問題描述】
有兩個正整數數列,元素個數分別為n和m。從兩個數列中分別任取乙個數
相乘,這樣一共可以得到nm個數,詢問這nm個數中第k小數是多少。
【輸入格式】
輸入檔名為number.in。
輸入檔案包含三行。
第一行為三個正整數n,m和k。
第二行為n個正整數,表示第乙個數列。
第三行為m個正整數,表述第二個數列。
【輸出格式】
輸出檔名為number.out。
輸出檔案包含一行,乙個正整數表示第k小數。
【輸入輸出樣例1 1 】
number.in
2 3 4
1 22 1 3
number.out
3【輸入輸出樣例2 2 】
number.in
5 5 18
7 2 3 5 8
3 1 3 2 5
number.out
【資料規模與約定】
樣例點編號 n m k 元素大小(≤)
1 20 20 150 10^4
2 50 50 2000 10^4
3 100 80 5000 10^9
4 200 200 26000 10^9
5 10000 10000 50050000 10^4
6 1000 20000 9500000 10^4
7 1000 20000 10000500 10^9
8 2000 20000 190000 10^9
9 2000 20000 199000 10^9
10 20000 20000 210005000 10^4
11 20000 20000 210000 10^5
12 20000 20000 200000 10^9
13 20000 20000 220000500 10^5
14 20000 20000 199000500 10^9
15 200000 200000 180000 10^4
16 200000 200000 200000 10^9
17 2000 200000 100001500 10^9
18 200000 180000 19550000000 10^5
19 200000 200000 19900010000 10^9
20 200000 200000 20000010000 10^9
可以發現排序後的兩個數列滿足單調性
所以可以二分答案
#include#include#includeusing namespace std;
#define ll long long
const int maxn = 200000 + 10;
ll n,m,k;
ll a[maxn], b[maxn];
ll read()
while(ch >= '0' && ch <= '9')
return x * f;
}bool pd(ll mid)
if(sum >= k) return 1;
return 0;
}int main()
else
} cout
}
第K小數(二分)
問題描述 有兩個正整數數列,元素個數分別為n和m。從兩個數列中分別任取乙個數 相乘,這樣一共可以得到n m個數,詢問這n m個數中第k小數是多少。輸入格式 輸入檔案包含三行。第一行為三個正整數n,m和k。第二行為n個正整數,表示第乙個數列。第三行為m個正整數,表述第二個數列。輸出格式 輸出檔案包含一...
hiho 1133 二分 二分查詢之k小數
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述在上一回裡我們知道nettle在玩 艦 nettle的鎮守府有很多船位,但船位再多也是有限的。nettle通過撈船又出了一艘稀有的船,但是已有的n 1 n 1,000,000 個船位都已經有船了。所以nettle不得不把其...
動態維護集合第k小數字 樹狀陣列 二分
設計一種資料結構能夠實現以下幾個操作 在結構中插入乙個數字x 在結構中刪除乙個數字x 如果沒有該數字,應當不操作 查詢結構中的第k小數字 相同數字應當累計,如 1 5 3 3 1,第 3 大的數字是 3,第 5 大的數字是 5.其中1 x 100000 一秒需要執行100000次隨機操作,所以三項操...