2269 minval(優先佇列 堆排序)

2022-07-29 16:36:25 字數 958 閱讀 2414

時間限制: 3 sec  記憶體限制: 256 mb

提交: 638  解決: 65

[提交][狀態][討論版][命題人:外部匯入]有兩個長度為n的序列a和b,在a和b中各任取乙個數相加可以得到n2個和,求這n2個和中最小的n個。

第一行輸入乙個正整數n(1<=n<=100000);

第二行n個整數ai且ai<=109;第三行n個整數bi且bi<=109。

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

5

1 3 2 4 5

6 3 4 1 7

2 3 4 4 5
/*

堆排序(優先佇列)

* 維護 n 個最小的數字

* 別忘記排序

*/#include

#include

#include

#include

using

namespace

std ;

#define maxn 110000

intn ;

intnum1[maxn] , num2[maxn] ;

priority_queue

min_num ;

intresult[maxn] ;

intmain()

for(int j=1 ; j<=n ; j++)

sort(num1+1 , num1+n+1

) ;

sort(num2+1 , num2+1+n) ;

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

for(int i=2 ; i<=n ; i++)

else}}

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

for(int i=n ; i>=1 ; i--)

return0;

}

zzuliOJ 2269 minval 優先佇列

有兩個長度為n的序列a和b,在a和b中各任取乙個數相加可以得到 n 2n 2 n2個和,求這n2個和中最小的n個。第一行輸入乙個正整數n 1 n 100000 第二行n個整數ai且 a i 1 09 ai 10 ai 1 09 第三行n個整數bi且 b i 1 09 bi 10 bi 1 09。輸出...

minval 優先佇列

思路就是先將兩個陣列sort一下,然後將a 0 b i 入隊,然後再去遍歷a 1 n,b 0 n的陣列,如果a i b j 小於q.top 就更新佇列裡面的數,因為之前已經sort過了,如果a i b j 大於等於q.top 那麼在b j 之後的數也不會小於q.top 所以後面的就可以省略了,不然會...

優先佇列《堆》

1.模型 兩個基本操作 insert等價enqueue deletemin刪除最小者 dequeue 2.簡單的實現 1 簡單鍊錶 遍歷刪除min或者排序刪除min 2 使用二叉查詢樹。反覆除去min會使得樹不平衡,並且bst還支援許多不需要的操作。3.二叉堆 優先佇列的實現普遍使用二叉堆,堆有兩個...