2269: minval

题目描述

有两个长度为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
#include<iostream>
#include<queue>
#include<algorithm>
#define N 100005
using namespace std;
int main()
{
    priority_queue<int > p;
    int n,a[N],b[N],ans[N];
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    for (int i = 1; i <=n; i++)
    {
        cin >> b[i];
    }
    sort(a+1, a + n+1);
    sort(b+1, b + n+1);
    for (int j = 1; j <=n; j++)
    {
        int tem = a[1] + b[j];
        p.push(tem);
    }
    for (int i = 2; i <=n;i++)
    for (int j = 1; j <=n; j++)
    {
        int    item = a[i] + b[j];
        if (item>=p.top())
            break;
        p.pop();
        p.push(item);
    }
    for (int i = 1; i <=n; i++)
    {
        ans[i] = p.top();
            p.pop();
    }
    for (int i =n; i>0; i--)
    {
        cout << ans[i] << " ";
        
    }
    cout<<endl;
        return 0;
}

 

posted @ 2018-10-17 19:15  Binary_tony  阅读(186)  评论(0编辑  收藏  举报