https://www.luogu.org/problem/show?pid=1631
在lrj的蓝书上有详细介绍
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define ms(i,j) memset(i,j, sizeof i);
using namespace std;
int n;
int A[100005], B[100005];
struct node
{
int sum;
int no;
node (int s, int n) : sum(s), no(n){}
};
struct cmp
{
bool operator()(node a, node b)
{
return a.sum>b.sum;
}
};
int d[100005];
priority_queue<node, vector<node>, cmp> p;
int main()
{
scanf("%d", &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++)
{
d[i] = 1;
p.push(node(A[i]+B[d[i]], i));
}
int tot = 0;
while (tot<n)
{
node c = p.top();p.pop();
printf("%d ", c.sum);
d[c.no]++; tot++;
p.push(node(A[c.no]+B[d[c.no]], c.no));
}
return 0;
}