P1631 序列合併

2022-05-13 13:17:55 字數 1172 閱讀 6738

有兩個長度都是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

需要注意一下

priority_queue比heap慢

make_heap比pop_heap慢

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int maxn=1000001

;9 priority_queueq;

10void read(int &n)

1118

19while(c>='

0'&&c<='9'

)20 x=x*10+c-48,c=getchar();

21if(flag==1)n=-x;

22else n=x;23}

24int

n,tot;

25int

a[maxn],b[maxn],c[maxn];

26int

main()

2746

else

break;47

}48}49

//priority_queue,greater>p;

50 make_heap(c+1,c+n+1,greater());

51int k=n;

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

5358

return0;

59 }

P1631 序列合併

做法 將 a 和 b 都從小到大排一遍序。然後組成這樣乙個矩陣 a1 b1 a1 b2 a1 b3 a1 bn a2 b1 a2 b2 a2 b3 a2 bn a3 b1 an b1 an b2 an b3 an bn 正確性 我們先把每行的頭扔進堆裡,每行的頭是每行中的最小值,所以這樣我們能在堆裡...

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 的資料中,滿足1 n 1000 對於...

P1631 序列合併

有兩個長度都是n的序列a和b,在a和b中各取乙個數相加可以得到 n 2n2 個和,求這 n 2n2 個和中最小的n個。輸入格式 第一行乙個正整數n 第二行n個整數 a iai 滿足 a i le a ai ai 1 且 a i le 10 9ai 10 9 第三行n個整數 b ibi 滿足 b i ...