蒟蒻求助!
查看原帖
蒟蒻求助!
310317
lzytag楼主2021/8/9 10:38
#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]])
2021/8/9 10:38
加载中...