#include<iostream>
#include<cstdio>
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,l,r;
long long x[1000001],p[1000001],c[1000001],h[1000001],q[1000001],f[1000001];
inline long long calc(int k,int j){
return (long long)((double)(f[j]-f[k]+h[j]-h[k])/(double)(p[j]-p[k]));
}
int main(){
n=read();
for(int i=1;i<=n;i++){
x[i]=read();p[i]=read();c[i]=read();
}
for(int i=1;i<=n;i++){
h[i]=h[i-1]+x[i]*p[i];p[i]+=p[i-1];
}
for(int i=1;i<=n;i++){
while(l<r&&calc(q[l],q[l+1])<x[i])l++;
int t=q[l];f[i]=f[t]+x[i]*(p[i]-p[t])-h[i]+h[t]+c[i];
while(l<r&&calc(q[r],i)<calc(q[r-1],q[r]))r--;
q[++r]=i;
}
printf("%lld",f[n]);
return 0;
}
1096: [ZJOI2007]仓库建设
最新推荐文章于 2019-09-11 00:10:20 发布