https://codeforces.com/problemset/problem/1486/D
作者:
hongye
,
2025-04-19 22:45:19
· 辽宁
,
所有人可见
,
阅读 3
https:
#include <iostream>
using namespace std;
const int N = 200020;
int val[N] , arr[N];
int n , k , max_a;
bool check(int mid){
arr[1] = (val[1]>=mid ? 1 : -1);
for(int i=2;i<=n;i++){
arr[i] = arr[i-1]+(val[i]>=mid ? 1 : -1);
}
int min_num = 0 , ans = 0;
for(int i=k;i<=n;i++){
if(i > k){
min_num = min(min_num,arr[i-k]);
}
ans = max(ans,arr[i]-min_num);
}
return ans > 0;
}
int find(){
int l = 1 , r = max_a;
int mid , ans = 0;
while(l <= r){
mid = (l+r)>>1;
if(check(mid)){
ans = mid;
l = mid+1;
}else{
r = mid-1;
}
}
return ans;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>val[i];
max_a = max(max_a,val[i]);
}
cout<<find();
return 0;
}