参考链接:https://www.luogu.com.cn/problem/solution/P14665
先贴代码,后续补
cpp
#include<bits/stdc++.h>
using namespace std;
int mx,mn,n,m,a[5005];
struct qj{
int l,r;
};
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
while(1){
mx=0,mn=1e9;
for(int i=1;i<=n;i++){
mx=max(mx,a[i]);
mn=min(mn,a[i]);
}
if(mx==mn||m==0) break;
bool flag=0;
int l=0,r=0;
vector<qj> v1,v2;
for(int i=1;i<=n;i++){
if(a[i]==mx){
flag=1;
if(l==0) l=i;
r=i;
}
if((a[i]==mn||i==n)&&flag==1){
v1.push_back(qj{l,r});
l=0,r=0;
flag=0;
}
}
for(int i=1;i<=n;i++){
if(a[i]==mn){
flag=1;
if(l==0) l=i;
r=i;
}
if((a[i]==mx||i==n)&&flag==1){
v2.push_back(qj{l,r});
l=0,r=0;
flag=0;
}
}
int cnt1=v1.size(),cnt2=v2.size();
if(cnt1<cnt2){
if(m>=cnt1) {
m-=cnt1;
for(int i=0;i<cnt1;i++){
for(int j=v1[i].l;j<=v1[i].r;j++) a[j]--;
}
}
else break;
}
else{
if(m>=cnt2) {
m-=cnt2;
for(int i=0;i<cnt2;i++){
for(int j=v2[i].l;j<=v2[i].r;j++) a[j]++;
}
}
else break;
}
}
mx=0,mn=1e9;
for(int i=1;i<=n;i++){
mx=max(mx,a[i]);
mn=min(mn,a[i]);
}
cout<<mx-mn;
return 0;
}