题意:给你n趟A到B的航班 以及航班到达时间为ta 和 m趟B到C的航班 以及到达时间为tb 你最后可以取消k趟航班 尽量使得别人最晚到达C 如果不能到达C 输出-1
思路:二分 将到达B点的所有时间 以及 B的出发时间 进行排序 ( 因为到达B的时间越晚越好 )然后枚举取消A到B的数量 然后二分找到B中小于等于a[i+1]的位置 如果剩下的航班数小于 k-i 则输出-1 否则 维护一个最大值
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=2e5+10;
ll a[MAXN];
ll b[MAXN];
int main()
{
ll n,m,ta,tb,k;
cin>>n>>m>>ta>>tb>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i]+=ta;
}
for(int i=1;i<=m;i++)
{
cin>>b[i];
}
ll t;
t=min(n,m);
if(t<=k)
{
cout<<-1<<endl;
return 0;
}
ll ans=0;
for(int i=0;i<=k;i++)
{
int flag=i+1;
int tt=lower_bound(b+1,b+1+m,a[flag])-b;
if(k-i>=m-tt+1)
{
cout<<"-1"<<endl;
return 0;
}
ans=max(ans,b[tt+k-i]+tb);
}
cout<<ans<<endl;
return 0;
}