题解:AT_abc457_d [ABC457D] Raise Minimum
这一道题要求我们最大化
上界是什么?注意到这里
下界显然是 __int128 的一中方法是假如当前累加到的次数已经大于
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 2e5 + 5;
int L = 1, R = 2e18, n, a[N], k, ans;
bool check(int x) {
int res = 0;
for(int i = 1; i <= n; i ++ ) {
if(a[i] < x) res += (x - a[i] + i - 1) / i;
if(res > k) return false;
}
return true;
}
signed main() {
ios :: sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; i ++ ) cin >> a[i];
while(L <= R) {
int mid = L + R >> 1;
if(check(mid)) ans = mid, L = mid + 1;
else R = mid - 1;
}
cout << ans << endl;
return 0;
}