#include<bits/stdc++.h>
#define N 100005
#define M 100005
#define int long long
using namespace std;
int a[N],n,k,sum,tp,s;
bool check(int mid)
{
int tsum=0;
for(int i=1;i<=n;i++)
{
tsum+=min(a[i],mid);
}
tsum=n-sum;
return tsum<k;
}
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
int l=0,r=sum/k;
while(l<r)
{
int mid=(l+r+1)/2;
if(check(mid))
{
l=mid;
}
else
{
r=mid-1;
}
}
l=max(l,r);
for(int i=1;i<=n;i++)
{
s+=min(a[i],l);
a[i]=max(a[i]-l,tp);
}
for(int i=1;i<=n&&s<k;i++)
{
if(a[i]>0)
{
a[i]--;
s++;
}
}
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
2 个赞
这部分为什么到n就结束了? 不应该剩余操作全部执行完么
3 个赞