有序數列第K小

2022-04-30 04:39:09 字數 867 閱讀 9951

給出兩個長度分別為\(n,m\)的單調非遞減數列,求出它們合併後的第\(k\)小值。

第一行三個數,\(n,m,k\)如題意所述;

第二行\(n\)個數,依次為數列1;

第三行\(m\)個數,依次為數列2;

乙個數,表示合併後的第\(k\)小值。

對於所有資料,\(k\le n+mk≤n+m , a_i\le 10^8\),時間限制200ms。

這個題其實考察的是\(logk\)的分治做法

對當前的兩個序列,左指標為\(la,lb\),右指標為\(ra,rb\),求當前的第\(k\)小值。

把第\(k\)小值除2,取兩個序列之一貢獻這麼多,得到子問題

注意邊界情況

code:

#include int min(int x,int y)

if(lb>rb)

if(nk==1)

int lk=nk>>1;

lk=min(lk,min(ra+1-la,rb+1-lb));

if(a[la+lk-1]

加上多次區間詢問

code:

#include int min(int x,int y)

if(lb>rb)

if(nk==1)

int lk=nk>>1;

lk=min(lk,min(ra+1-la,rb+1-lb));

if(a[la+lk-1]2018.7.26

兩個有序數序列中找第k小

description 已知兩個已經排好序 非減序 的序列x和y,其中x的長度為m,y長度為n,現在請你用分治演算法,找出x和y的第k小的數,演算法時間複雜度為o max 分析 既然說明了分治,那肯定是劃分為子問題。又已經排好序,模擬於二分查詢,每次丟棄一半,我們可以將x的一半元素與y的一半元素合併...

有序矩陣中第k小元素

題目 給定乙個 n x n 矩陣,其中每行和每列元素均按公升序排序,找到矩陣中第 k 小的元素。請注意,它是排序後的第 k 小元素,而不是第 k 個不同的元素。看到有序就會想到二分查詢,而本題的二分查詢十分的有趣。根據這個矩陣的定義,我們知道,最小的元素是最左上角元素,最大的元素是最左下角元素。由此...

有序數列中位

核心是將原問題轉變成乙個尋找第k小數的問題 假設兩個原序列公升序排列 這樣中位數實際上是第 m n 2小的數。所以只要解決了第k小數的問題,原問題也得以解決。首先假設陣列a和b的元素個數都大於k 2,我們比較a k 2 1 和b k 2 1 兩個元素,這兩個元素分別表示a的第k 2小的元素和b的第k...