P3195 [HNOI2008] 玩具装箱

#include<bits/stdc++.h>
#define qq 51234
using namespace std;
long long N,L,C[qq],Toy,Tony,f,s,w,x[qq],y[qq];
int main(){
    ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>N>>L;
	for(int i=1;i<=N;i++)cin>>C[i];
    for(int i=1;i<=N;i++){
        s+=C[i]+1,w=s-L-1;
		if(Toy>=Tony)Toy=Tony;
		else{
            while(Toy<Tony&&(1.0*(y[Toy+1]-y[Toy])
            /(x[Toy+1]-x[Toy]))<(w<<1))Toy++;
        }
		f=y[Toy]-2*w*x[Toy]+w*w;
        x[Tony+1]=s;
        y[Tony+1]=f+s*s;
		for(;Tony&&(1.0*(y[Tony]-y[Tony-1])
            /(x[Tony]-x[Tony-1]))
            >(1.0*(y[Tony+1]-y[Tony-1])
            /(x[Tony+1]-x[Tony-1]))
            ;Tony--){
			swap(x[Tony],x[Tony+1]);
            swap(y[Tony],y[Tony+1]);
        }
		Tony++;
	}
    cout<<f;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值