思路就是先將兩個陣列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(),所以後面的就可以省略了,不然會tle。因為佇列裡一直維護都是n個數,所以最後直接輸出就好了。
ac**:
#include #include #include #include #include using namespace std;
priority_queueq;
int n;
int a[100005],b[100005],c[100005];
int main()
else break; // 不能省略
}} int num = 0;
while(!q.empty())
for(int i=num-1;i>=0;i--)
return 0;
}
2269 minval(優先佇列 堆排序)
時間限制 3 sec 記憶體限制 256 mb 提交 638 解決 65 提交 狀態 討論版 命題人 外部匯入 有兩個長度為n的序列a和b,在a和b中各任取乙個數相加可以得到n2個和,求這n2個和中最小的n個。第一行輸入乙個正整數n 1 n 100000 第二行n個整數ai且ai 109 第三行n個...
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。輸出...
優先佇列(3道優先佇列問題)
優先佇列是一種十分強大的資料結構,它保持了一種動態的有序性,對於不斷改變有入隊的操作,而又需要某種最大或最小的操作的問題是再合適不過了,通常優先佇列的實現是由最小堆或者最大堆完成的,並通過堆排序保持佇列的有序性,模擬佇列的結構,在實際比賽中要寫乙個堆排序還是要一定的時間的,但是stl中queue容器...