zoukankan      html  css  js  c++  java
  • [Apio2010]特别行动队

    1911: [Apio2010]特别行动队

    Time Limit: 4 Sec  Memory Limit: 64 MB
    [Submit][Status][Discuss]

    Description

    Input

    Output

    Sample Input

    4
    -1 10 -20
    2 2 3 4

    Sample Output

    9

    HINT

    斜率优化的式子搞出来之后,a是负的,所以要么不除过去,要么除过去变号

     
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #define N 1000001 
    using namespace std;
    int q[N],head,tail;
    long long dp[N],sum[N],a,b,c,n;
    void read(long long &x)
    {
        x=0; int f=1; char c=getchar();
        while(!isdigit(c)) { if(c=='-') f=-1; c=getchar();}
        while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
        x*=f;
    }
    long long up(int k,int j)
    {
        return dp[j]-dp[k]+a*(sum[j]*sum[j]-sum[k]*sum[k])+b*(sum[k]-sum[j]);
    }
    long long down(int k,int j)
    {
        return 2*(sum[j]-sum[k]);
    }
    int main()
    {
        read(n);
        read(a); read(b); read(c);
        for(int i=1;i<=n;i++) 
        {
            read(sum[i]);
            sum[i]+=sum[i-1];
        }
        int j;
        for(int i=1;i<=n;i++)
        {
            while(head<tail && up(q[head],q[head+1])>=down(q[head],q[head+1])*sum[i]*a) head++;
            j=q[head];
            dp[i]=dp[j]+a*(sum[i]-sum[j])*(sum[i]-sum[j])+b*(sum[i]-sum[j])+c;
            while(head<tail && up(q[tail-1],q[tail])*down(q[tail],i)<=up(q[tail],i)*down(q[tail-1],q[tail])) tail--;
            q[++tail]=i;
        }
        printf("%lld",dp[n]);
    }
  • 相关阅读:
    事事浑不着意,总得有走心的地方
    Struts2框架概述
    java算法数据结构
    shell十三问(转)
    linux:将job放在后台执行的方法
    Python性能(转)
    python collections deque
    python中的参数传递和返回值
    python中的下划线
    python学习笔记glob模块
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7481644.html
Copyright © 2011-2022 走看看