題意:給你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;
}