二分答案,枚举起点
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define maxn 1005
int n,m,l;
int a[maxn];
int solve(int x){
int num=0;
for(int i=0;i<n;i++)
if(a[i]<x){
num++;
i+=l-1;
}
return num;
}
int main()
{
scanf("%d%d%d",&n,&m,&l);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
int st=0,nd=1e9+7;
while(st<=nd){
int mid=(st+nd)/2;
int num=100000;
for(int i=0;i<l;i++){
for(int j=0;j<n-1;j++) swap(a[j],a[j+1]);
num=min(num,solve(mid));
}
if(num<=m) st=mid+1;
else nd=mid-1;
}
printf("%d\n",nd);
}