序列合并
题目描述
解题思路
我们可以把它当成贪心来想:
首先将
a
a
a 数列的第一个与
b
b
b 数列的每一个匹配,用堆储存,每次取最小值,在将
a
a
a 数列向后移一位进行匹配,重复
n
n
n 遍。
code
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
priority_queue<pair<int,pair<int,int> > > q;
int n;
int a[100010];
int b[100010];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
q.push(make_pair(-a[i]-b[1],make_pair(i,1)));
for(int i=1;i<=n;i++)
{
int x=q.top().second.first;
int y=q.top().second.second;
cout<<-q.top().first<<" ";
q.pop();
q.push(make_pair(-a[x]-b[y+1],make_pair(x,y+1)));
}
}