求大佬告知哪里写错了~~~
  • 板块P1419 寻找段落
  • 楼主jor蛋
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/6/30 00:57
  • 上次更新2023/10/27 22:18:36
查看原帖
求大佬告知哪里写错了~~~
72921
jor蛋楼主2022/6/30 00:57
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n,S,T;
double pre[N],b[N];
int q[N],a[N];
bool check(double mid){
    for(int i=1;i<=n;i++)
        pre[i]=pre[i-1]+(double)a[i]-mid;
    int hh=1,tt=0;
    int len=T-S+1; 
    for(int i=S;i<=n;i++){
        if(hh<=tt&q[hh]<=i-len) hh++;
        while(hh<=tt&&pre[q[tt]]<=pre[i]) tt--;
        q[++tt]=i;
        int p=max(i-T,0);
        if(hh<=tt&&pre[q[hh]]-pre[p]>=0) return true;
    }
    return false;
}   
int main(){
    cin>>n>>S>>T;
    for(int i=1;i<=n;i++) cin>>a[i];
    double l=-2e4,r=2e4,res;
    while(r-l>1e-5){
        double mid=(l+r)/2;
        if(check(mid)) l=mid;
        else r=mid;
    }
    printf("%.3lf",l);
}   
2022/6/30 00:57
加载中...