使用大根堆维护最大值,每次分解为两半
#include<bits/stdc++.h>
using namespace std;
int n,k,cnt,cc,minn;
char xl[100001];
priority_queue<int> s;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>xl[i];
}
for(int i=0;i<=n;i++){
if(xl[i]!=xl[i+1]){
s.push(cnt);
cnt=1;
}
else{
cnt++;
}
}
for(int i=1;i<=k;i++){
cc=s.top();
s.pop();
s.push((cc-1)/2);
s.push(cc-(cc-1)/2-1);
}
while(!s.empty()){
minn=max(minn,s.top());
s.pop();
}
cout<<minn;
return 0;
}
如果解法有误请帮我hack一下谢谢