思路是贪心用双指针,分第一个大于第二个和第一个小于第二个跑两次。当第一个取 i 时第二个取到小于等于第一个的,这样随着 i 增大,第二个再小和也更小且差更大。求调,或证明思路有误
// LUOGU_RID: 197479225
#include <bits/stdc++.h>
#define int long long
#define f(x) freopen(x"in.txt","r",stdin);freopen(x"out.txt","w",stdout)
using namespace std;
int a[200005];
int b[200005];
signed main(){
int n,m,d;
cin>>n>>m>>d;
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=1;i<=m;i++) cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+m+1);
int j=1,ans=-1;
for (int i=1;i<=n;i++){
if (a[i]<b[j]) continue;
while (a[i]>=b[j]&&j<=m) {
if (a[i]-b[j]<=d) ans=a[i]+b[j];
j++;
}
j--;
}
j=1;
for (int i=1;i<=m;i++){
if (a[j]>b[i]) continue;
while (b[i]>=a[j]&&j<=n) {
if (b[i]-a[j]<=d) ans=a[j]+b[i];
j++;
}
j--;
}
cout<<ans;
return 0;
}