赛时就T了
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define maxn (int)2e5
#define INF (long long)1e18
long long n,m,L,R;
long long a[maxn+100],b[maxn+100],p[maxn+10];
priority_queue<pair<long long,pair<int,int>>,vector<pair<long long,pair<int,int>>>,greater<pair<long long,pair<int,int>>>>q;
long long get(long long x)
{
long long cnt=0;
for(int i=0;i<n;i++)
{
p[i]=upper_bound(b,b+n,x-a[i])-b;
cnt+=p[i];
}
return cnt;
}
int main()
{
scanf("%lld%lld%lld",&n,&L,&R);
for(int i=0;i<n;i++)scanf("%lld",&a[i]);
for(int i=0;i<n;i++)scanf("%lld",&b[i]);
sort(b,b+n);
long long l=0,r=INF,ans=-1;
while(l<=r)
{
long long mid=(l+r)/2;
if(get(mid)>=L)
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
long long cnt=get(ans);
for(int i=0;i<min(R,cnt)-L+1;i++)printf("%lld ",ans);
for(int i=0;i<n;i++)q.push({a[i]+b[p[i]],{i,p[i]}});
for(int i=cnt+1;i<=R;i++)
{
pair<long long,pair<int,int>>u=q.top();
printf("%lld ",u.first);
q.pop();
if(u.second.second<n-1)q.push({a[u.second.first]+b[u.second.second+1],{u.second.first,u.second.second+1}});
}
printf("\n");
return 0;
}