#include<bits/stdc++.h>
using namespace std;
#define MaxN 300005
int n;
long long sumc[MaxN],sumt[MaxN],f[MaxN];
long long s;
int q[MaxN],h=1,t=1;
int bs(long long x)
{
int l=h,r=t;
int ans=q[l];
while(l<r)
{
int mid=(l+r)/2;
int k=q[mid],j=q[mid+1];
if(x*(sumc[j]-sumc[k])<f[j]-f[k])
{
ans=k;
r=mid;
}
else
{
ans=j;
l=mid+1;
}
}
return ans;
}
int main()
{
cin>>n>>s;
for(int i=1;i<=n;i++)
{
cin>>sumt[i]>>sumc[i];
sumc[i]+=sumc[i-1];
sumt[i]+=sumt[i-1];
}
for(int i=1;i<=n;i++)
{
int j=bs(sumt[i]+s);
f[i]=f[j]+sumt[i]*(sumc[i]-sumc[j])+s*(sumc[n]-sumc[j]);
while(h+1<=t)
{
if((f[i]-f[q[t]]) * (sumc[q[t]]-sumc[q[t-1]]) <= (f[q[t]]-f[q[t-1]]) * (sumc[i]-sumc[q[t]])) t--;
else break;
}
q[++t]=i;
}
cout<<f[n]<<endl;
return 0;
}
第四十四行的
(f[i]-f[q[t]]) * (sumc[q[t]]-sumc[q[t-1]]) <= (f[q[t]]-f[q[t-1]]) * (sumc[i]-sumc[q[t]])
为什么不能是
(f[i]-f[q[t]]) * (sumc[q[t]]-sumc[q[t-1]]) <(f[q[t]]-f[q[t-1]]) * (sumc[i]-sumc[q[t]])