题解:AT_abc457_d [ABC457D] Raise Minimum
liangliang517 · · 题解
思路
显然,我们可以考虑二分答案。因为
代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,l=1,r=2e18,z,sum,a[200010];
int main( ){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(l<=r){
z=(l+r)/2,sum=0;
for(long long i=1;i<=n;i++){
if(a[i]>=z) continue;
sum=sum+max(0ll,(z-a[i]-1)/i+1);
if(sum>m) break;
}
if(sum<=m) l=z+1;
else r=z-1;
}
cout<<l-1<<endl;
return 0;
}