第K小數(二分)

2021-08-09 09:17:18 字數 1646 閱讀 1525

【問題描述】

有兩個正整數數列,元素個數分別為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次隨機操作,所以三項操...