第k大數 兩個陣列元素相乘後的第k大

2021-08-21 03:35:37 字數 1229 閱讀 1177

分析:二分,兩邊夾,細節見**。(複雜度為o(2nlog(maxa*maxb)))

**一:

#include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 100010;

ll a[maxn], b[maxn];

int n,k;

bool check(ll val)//統計比val小的數的個數cnt,看cnt比k大還是比k小

return cnt >= k;

}ll solve()//二分查詢第k大的數

return l;

}int main()

**二:

#pragma comment(linker, "/stack:102400000,102400000")///手動擴棧

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn=1e5+1;

const double inf=999999999;

#define lson (rt<<1),l,m

#define rson (rt<<1|1),m+1,r

#define m ((l+r)>>1)

#define for(i,t,n) for(int i=(t);i<(n);i++)

typedef long long ll;

typedef double db;

typedef pairp;

#define bug printf("---\n");

#define mod 1000000007

int a[maxn],b[maxn];

int n,k;

bool pan(ll num)

void slove()

cout<>n>>k;

for(int i=0;i>a[i]>>b[i];

sort(a,a+n);

sort(b,b+n);

slove();

return 0;

}

兩個有序陣列的第k大數

coding utf 8 兩有序陣列的第k大 一種思路是用o m n 的空間複雜度,然後時間複雜度的話只需要o k 吧,就是從後往前掃k個就ok了 另一就是不需要額外的空復,然後時復o log m n 遞迴 a 19,11,8,7,4,2,0 b 13,8,6,3,1 k 4 m,n len a l...

兩個數列取第k小數

1 1 第k k 小數 number cpp c pas 問題描述 有兩個正整數數列,元素個數分別為n和m。從兩個數列中分別任取乙個數 相乘,這樣一共可以得到n m個數,詢問這n m個數中第k小數是多少。輸入格式 輸入檔名為number.in。輸入檔案包含三行。第一行為三個正整數n,m和k。第二行為...

谷歌面試題 兩個陣列合併後第k小的數字

題目描述 給定兩個整型陣列a和b。我們將a和b中的元素兩兩相加可以得到陣列c。譬如a為 1,2 b為 3,4 那麼由a和b中的元素兩兩相加得到的陣列c為 4,5,5,6 現在給你陣列a和b,求由a和b兩兩相加得到的陣列c中,第k小的數字。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行...