洛谷 P1631 序列合併 二分答案 排序

2021-09-10 17:22:28 字數 1054 閱讀 4019

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n^2個和,求這n^2個和中最小的n個。

輸入格式:

第一行乙個正整數n;

第二行n個整數a_iai​, 滿足a_i\le a_ai​≤ai+1​且a_i\le 10^9ai​≤109;

第三行n個整數b_ibi​, 滿足b_i\le b_bi​≤bi+1​且b_i\le 10^9bi​≤109.

【資料規模】

對於50%的資料中,滿足1<=n<=1000;

對於100%的資料中,滿足1<=n<=100000。

輸出格式:

輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間用空格隔開。

輸入樣例#1

3

2 6 6

1 4 8

輸出樣例#1

3 6 7
乙個個都用堆?我用的二分答案,把答案在n^2個數里逐排比較,遇到大於答案或者超過n個數的就break,最後再排序,輸出n個即可。

#include #include #include using namespace std;

int a[110001],b[110001],sq[6000001],n,s;

inline int judge(int x)

if(a[i]+b[j]>x) break;

} }if(sum>=n) return 1;

else return 0;

}signed main()

for(i=1;i<=n;i++)

int l=a[1]+b[1],r=a[n]+b[n];

while(r!=l)

else

}l--;

for(i=1;i<=n;i++)

}} sort(sq+1,sq+s+1);

for(i=1;i<=n;i++)

cout

}

洛谷 P1631 序列合併

題目描述 有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。輸入輸出格式 輸入格式 第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.資料規模 對於50 的資料中,滿...

洛谷 P1631 序列合併

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個。第一行乙個正整數n 第二行n個整數ai,滿足ai ai 1且ai 10 9 第三行n個整數bi,滿足bi bi 1且bi 10 9.輸出僅一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間...

洛谷P1631 序列合併

序列合併 問題描述 有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到n 2個和,求這n 2個和中最小的n個 n 100000 分析 a i 與b j 相加後,下面相加的一定是a i 1 b j 或a i b j 1 一開始我們把b 1 與a中所有元素相加放入乙個小根堆裡,輸出min,然...