1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <bits/stdc++.h> using namespace std;
const int N = 1e6+10; const int MAX = 1e11;
typedef long long LL;
LL n,m,a[N],b[N];
bool check(int mid){ LL sum = m; for(int i=1;i<=n;i++){ if(a[i] >= mid) continue; if(b[i]+a[i] < mid || sum+a[i] < mid) return false; sum = sum - (mid - a[i]); } if(sum < 0) return false; else{ return true; } } int main() { cin >> n >> m; for(int i=1;i<=n;i++){ cin >> a[i]; } for(int i=1;i<=n;i++){ cin >> b[i]; } LL l = 0, r = INT_MAX; while(l<r){ LL mid = (l+r+1) / 2; if(check(mid)){ l = mid; } else{ r = mid-1; } } cout << l; return 0; }
|