acwing102最佳牛围栏

#include<iostream>

#include<algorithm>

#define lb long double

using namespace std;

const int N = 100010;

int n,f,q[N],a[N];

 

lb slope(int x,int y) {

    return (1.0*a[x]-a[y])/(1.0*x-y);

}

 

int main()

{

    cin>>n;

    cin>>f;

    for(int i=1;i<=n;++i) {

        cin>>a[i];

        a[i]+=a[i-1];

    }

        

    int head = 1 , tail = 0;

    lb ans = 0 ; 

    //队列中存的是转移左端点-1

    for(int i = f;i <= n; i++) {

        int ys = i-f ; //延迟f个点插入

        while(head<tail && slope(q[tail],ys) <= slope(q[tail-1],ys)) tail--;

        q[++tail]=ys;

        while(head<tail && slope(q[head],i) <= slope(q[head+1],i)) head++; 

        ans = max(ans , slope(q[head],i));

    }

    printf("%d\n",(int)(1000*ans));

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值