洛谷 堆專題 序列合併

2021-07-26 05:57:10 字數 780 閱讀 5877

有兩個長度都是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%的資料中,滿足1<=n<=1000;

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

輸出格式:

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

輸入樣例#1:

3                             

2 6 6

1 4 8

輸出樣例#1:

3 6 7

題解:將兩個序列按從小到大排序(實際資料已經有序),對於a[i]和b[j],a[i]+b[j]

於是我們建乙個大根堆,儲存最小的n個和。先將a[1]和b的和放入堆中,之後的a[i]和b[j]的和每次與堆頂比較,大於則直接break,小於則置換堆頂即可。輸出時逆序輸出堆中元素

#include#include#include#define maxn 1000000

using namespace std;

priority_queueheap;

int n;

int a[maxn+5],b[maxn+5],ans[maxn+5];

int main()

洛谷1631 序列合併

題目描述 有兩個長度都是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 的資料中,滿...

洛谷 P1628 合併序列

題目傳送門 有n個單詞和字串t,按字典序輸出以字串t為字首的所有單詞。輸入檔案第一行包含乙個正整數n 接下來n行,每行乙個單詞,長度不超過100 最後一行包含字串t。資料規模 對於60 的資料,滿足1 n 1000 對於100 的資料,滿足1 n 100000且所有字元均為小寫字母 按字典序公升序輸...

洛谷1631 序列合併

題目描述 有兩個長度都是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 的資料中,滿...