题目
分析
发现答案具有二分性,果断二分答案
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;const int N = 2e5+10;int n, a[N], li[N];
ll m;bool check(int x)
{ll t = m;for(int i = 1; i <= n; i++){if(a[i] >= x) continue; //够if(a[i] < x && x - a[i] > li[i]) return false;//不够,不给else t -= x - a[i];if(t < 0) return false;}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 >> li[i];int l = 0, r = 3 * n;while(l < r){int mid = l + r + 1 >> 1;if(check(mid)) l = mid;else r = mid-1;}cout << l;
}