第五个点WA,向大犇求助
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=100005;
int n,s,t;
int l=100000000,r=-100000000,mid;
int a[N];
long long sum[N];
deque<int> q;
bool check(int x){
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i]-x;
q.clear();
for(int i=s,tot=0;i<=n;i++,tot++){
while(!q.empty()&&sum[q.back()]>sum[tot]) q.pop_back();
q.push_back(tot);
while(q.front()+t<i) q.pop_front();
if(sum[i]-sum[q.front()]>=0) return 1;
}
return 0;
}
int main(){
scanf("%d%d%d",&n,&s,&t);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
a[i]*=10000;
l=min(l,a[i]);
r=max(r,a[i]);
}
while(l<=r){
mid=(l+r)>>1;
if(check(mid)) l=mid+1;
else r=mid-1;
}
printf("%.3f",mid/10000.0);
return 0;
}