代码
```
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n=1,T,Heap[1000010],a[100010],b[100010],num[100010],c[100010];
void Insert(int value,int x)
{
Heap[++T]=value;
num[T]=x;
int loc=T;
while(Heap[loc]<Heap[loc>>1] && loc>1)
{
int t=Heap[loc>>1];
Heap[loc>>1]=Heap[loc];
Heap[loc]=t;
t=num[loc>>1];
num[loc>>1]=num[loc];
num[loc]=t;
loc>>=1;
}
}
void Delete()
{
Heap[1]=Heap[T];
num[1]=num[T--];
int loc=1;
while((loc<<1)<=T)
{
int nloc=(loc<<1);
if(nloc+1<=T && Heap[nloc]>Heap[nloc+1])nloc++;
if(Heap[loc]>Heap[nloc])
{
int t=Heap[nloc];
Heap[nloc]=Heap[loc];
Heap[loc]=t;
t=num[nloc];
num[nloc]=num[loc];
num[loc]=t;
}
else break;
loc=nloc;
}
}
int main()
{
// while(scanf("%d",&a[n])!=EOF)n++;
// n/=2;
// for(int i=1;i<=n;i++)b[i]=a[i+n];
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++)Insert(a[i]+b[1],i),c[i]=1;
for(int i=1;i<=n;i++)
{
int t=num[1];
printf("%d ",Heap[1]);
Delete();
Insert(b[++c[t]]+a[t],t);
}
return 0;
}
```
by _szh_ @ 2019-06-03 20:30:37