https://codeforces.com/contest/1148/problem/B A->B 起飞时间n个 B->C 起飞时间m个 ta tb 航班乘坐这么多时间后到达 至多删除k个航班 使最早到达时间最大化
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; typedef long long ll; #define rep(i,a,n) for(int i=a;i<=n;i++) #define pb push_back ll n,m,t1,t2,k,ans; ll a[maxn],b[maxn]; int main(){ cin>>n>>m>>t1>>t2>>k; //k次尽量都用 for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=m;i++){ cin>>b[i]; } if(n<=k || m<=k) //把这一路全删 return cout<<-1<<endl,0; for(int i=0;i<=k;i++) //枚举a-b删除i个 { ll tmp=k-i; ll now=a[i+1]+t1; // 删完第一组最早到达时间是多少 a值越小的+到达时间符合的b航班越多 则删除靠前的 最短时间最大化 ll pos=lower_bound(b+1,b+m+1,now)-b; if(pos+tmp>m) //再删完tmp个 越界 { cout<<-1<<endl; return 0; } ll res=b[pos+tmp]+t2; ans=max(ans,res); } cout<<ans<<endl; return 0; }