1 条题解

  • 0
    @ 2023-10-1 19:21:11

    一个字[绝]

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define MAXN 1000000+10
    int n,l,r;
    int a,b,c;
    int  x[MAXN];
    long long sum[MAXN],f[MAXN];
    int q[MAXN];
    long long sqr(long long  x){return x*x;}
    inline double slop(int k,int j){return (double)(f[j]-f[k]+a*(sqr(sum[j])-sqr(sum[k]))+b*(sum[k]-sum[j]))/(double)(2*a*(sum[j]-sum[k]));}
    int main()
    {
        scanf("%d%d%d%d",&n,&a,&b,&c);
        for(int i=1;i<=n;i++)scanf("%d",&x[i]);
        for(int i=1;i<=n;i++)sum[i]=sum[i-1]+x[i];
        for(int i=1;i<=n;i++){
            while(l<r&&slop(q[l],q[l+1])<sum[i])l++;
            int t=q[l];
            f[i]=f[t]+a*sqr(sum[i]-sum[t])+b*(sum[i]-sum[t])+c;
            while(l<r&&slop(q[r-1],q[r])>slop(q[r],i))r--;
            q[++r]=i;
        }
        printf("%lld",f[n]);
        return 0;
    }
    
    • 1

    信息

    ID
    245
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    4
    已通过
    4
    上传者