比较简单的一题,二分一下就好,注意判断条件!!!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll a[N],b[N];
ll n,m;
bool pt(int x){
ll cn=0;
for(int i=1;i<=n;i++){
if(a[i]>=x)continue;
ll c=x-a[i];
if(c>b[i])return false;
cn+=c;
if(cn>m)return false;
}
if(cn>m)return false;
else return true;
}
int main(){
cin>>n>>m;
ll l=0x3f3f3f3f,r=0;
for(int i=1;i<=n;i++){
cin>>a[i];
l=min(l,a[i]);
r=max(r,a[i]);
}
for(int i=1;i<=n;i++)cin>>b[i];
while(l<r){
int mid=(l+r+1)/2;
if(pt(mid))l=mid;
else r=mid-1;
}
cout<<l<<endl;
return 0;
}