poj2018 Best Cow Fences

#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXSIZE 100500
#define sf scanf
#define pf printf
using namespace std;
int N,F;
int sum[MAXSIZE],t[MAXSIZE];
int stack[MAXSIZE],top,back;
long long Xmult(int i,int j,int k)
{
    return (long long )(i-j)*(sum[k]-sum[j])-(long long)(k-j)*(sum[i]-sum[j]);
}
void in_stack(int i)
{
    while(top>=2&&Xmult(i,stack[top-1],stack[top-2])<=0) top--;
    stack[top++]=i;
}
int main()
{
    while(~sf("%d%d",&N,&F))
    {
        sum[0]=0;
        for(int i=1; i<=N; i++)
        {
            sf("%d",&t[i]);
            sum[i]=sum[i-1]+t[i];
        }
        int i,j;
        top=back=0;
        long long ant=-1;
        for(i=F,j=0; i<=N; i++,j++)
        {
            in_stack(j);
            if(back>top-1)
            {
                long long temp;
                back=top-1;
                temp=(long long)(sum[i]-sum[stack[top-1]])*1000/(i-stack[top-1]);
                if(temp>ant)
                    ant=temp;
                    continue ;
            }
            while(back<top-1)
            {
                int x=stack[back];
                int y=stack[back+1];
                if((long long)(sum[i]-sum[y])*1000/(i-y)>=(long long)(sum[i]-sum[x])*1000/(i-x))
                back++;
                else break;
            }

            long long temp;
                temp=(long long)(sum[i]-sum[stack[back]])*1000/(i-stack[back]);
                if(temp>ant)
                    ant=temp;

            }
            pf("%lld\n",ant);
        }
        }



 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值