蓝桥杯备考:数据结构堆之序列合并
这道题我们固定a[1]和b数组的所有数组合,依次插入到堆里面,然后选n次最小的数,每次选出最小的数的时候,把a[i+1]和b数组的该数组合插入堆里面,直到输出n个数,我们程序就结束
#include <iostream>
#include <queue>
using namespace std;
const int N = 1e5+10;
typedef long long ll;
ll a[N],b[N];
struct node{
ll sum;
ll i;
ll j;
bool operator< (const node& x)const
{
return sum >x.sum;
}
};
priority_queue <node> heap;
int main()
{
ll n;
cin >> n;
for(int i = 1;i<=n;i++)
{
cin >> a[i];
}
for(int i = 1;i<=n;i++)
{
cin >> b[i];
heap.push({(a[1]+b[i]),1,i});
}
for(int c = 1;c<=n;c++)
{
node t = heap.top(); heap.pop();
ll i = t.i; ll sum = t.sum; ll j = t.j;
cout << sum << " ";
heap.push({(a[i+1]+b[j]),i+1,j});
}
return 0;
}