#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100000009];
bool ch(long long m){
long long ssum=0;
for(long long i=0;i<=n;i++){
ssum+=min(a[i],m);
}
if(ssum<k) return true;
else return false;
}
int main(){
cin>>n>>k;
long long sum=0;
for(long long i=1ll;i<=n;i++){cin>>a[i];sum+=a[i];}
long long mid,l=0ll,r=k+1ll;
while(l<r){
mid=(l+r)>>1ll;
if(ch(mid)) l=mid+1;
else r=mid;
}
l--;
for(long long i=1ll;i<=n;i++){
if(a[i]>l){
sum-=l;
a[i]-=l;
}else{
sum-=a[i];
a[i]=0;
}
}
int cnt=1;
while(sum>0){
if(a[cnt]>0){
a[cnt]--;
sum--;
}
if(cnt>n){
cnt=1;
}
}
for(long long i=1ll;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
2 个赞
r改成1e15 k最大才1e9
2 个赞
不用了
for(long long i=1ll;i<=n;i++){
if(a[i]>l){
sum-=l;
a[i]-=l;
}else{
sum-=a[i];
a[i]=0;
}
}
改成
for(long long i=1ll;i<=n;i++){
sum+=min(l,a[i]);
a[i]=max(a[i]-l,1LL-1);
}
2 个赞
if(a[cnt]>0){
a[cnt]--;
sum--;
}
if(cnt>n){
cnt=1;
}
这个改成
while(a[cnt]>0)cnt++;
a[cnt]--;sum--;
cnt++;
3 个赞