debug半天,也没找出错误,就是卡frend快读有点恶心,
参考博客https://blog.csdn.net/zyszlb2003/article/details/94427222
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN=100010;
int sum[MAXN];
int a[MAXN];
int q[MAXN];
int read()
{
int res=0,ch,flag=0;
if((ch=getchar())=='-') //判断正负
flag=1;
else if(ch>='0'&&ch<='9') //得到完整的数
res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
res=res*10+ch-'0';
return flag?-res:res;
}
//输入外挂
int tot;
const int BUF=25000000;
char Buf[BUF],*buf=Buf;
inline void read(int &a)
{
for(a=0;*buf<48;buf++);
while(*buf>47) a=a*10+*buf++-48;
}
inline double calc(int j,int i)
{
return (double)(sum[i]-sum[j])/(i-j);
}
int n,k;
int main() {
tot=fread(Buf,1,BUF,stdin);
while(1) {
// n=read(),k=read();
if(buf-Buf+1>=tot) break;
read(n),read(k);
sum[0]=0;
for(int i=1; i<=n; i++) {
// a[i]=read();
// sum[i]=sum[i-1]+a[i];
read(sum[i]);
sum[i]+=sum[i-1];
}
int l=1,r=0;
q[1]=0;
double ans=0;
for(int i=k; i<=n; i++) {
int j=i-k;
while(l<r && calc(q[r], q[r-1] ) >=calc(i-k,q[r-1]))
r--;
q[++r]=j;
while(l<r && calc(q[l+1],i)>=calc(q[l],i))
l++;
ans=max(ans,1.0*(sum[i]-sum[q[l]])/(i-q[l]) );
}
printf("%.2lf
",ans);
}
return 0;
}