双指针
牛的学术圈
本题主要是二分
ac代码
#include<iostream>
using namespace std;
int n,backup;
int arr[100010];
int check(int mid){
int backupp=backup;
int cnt=0;
for(int i=0;i<n;i++){
if(arr[i]>=mid){
cnt++;
}
else if(backupp&&arr[i]+1>=mid){
cnt++;
backupp--;
}
}return cnt>=mid;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>backup;
for(int i=0;i<n;i++)cin>>arr[i];
int l=0,r=1e6;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)){
l=mid;
}
else {
r=mid-1;
}
}
cout<<l;
return 0;
}