Submission #3951206


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll MOD = 1e9+7;
const ll INF = 1e18;
const int N = 2e5+5;
const ll M = 1e12+5;

template<ll SZ>
struct LiChao_min{
    struct Line{
        ll k,m;
        Line(){k=0,m=0;}
        Line(ll _k,ll _m){k=_k,m=_m;}
        ll Get(ll x){return k*x+m;}
    };

    struct node{
        node *l, *r;
        Line p;

        node(){p=Line(),l=nullptr,r=nullptr;}
        node(ll k,ll m){p=Line(k,m),l=nullptr,r=nullptr;}
        node(Line _p){p=_p,l=nullptr,r=nullptr;}
    };
    typedef node* pnode;

    pnode root = nullptr;

    void Reset(){root=nullptr;}
    void Set(ll k,ll m){
        Line p = Line(k,m);
        Set(root,0,SZ,p);
    }
    void Set(Line p){
        Set(root,0,SZ,p);
    }
    ll Get(ll x){return Get(root,0,SZ,x);}

    void Set(pnode &v,ll ss,ll se,Line t){
        if(!v){
            v = new node(t);
            return;
        }

        if(t.Get(ss)<v->p.Get(ss)&&t.Get(se)<v->p.Get(se)){v->p=t;return;}
        if(t.Get(ss)>=v->p.Get(ss)&&t.Get(se)>=v->p.Get(se))return;

        ll mid=(ss+se)>>1LL;

        if(t.Get(ss)>v->p.Get(ss)&&t.Get(mid)<v->p.Get(mid)){
            swap(t,v->p);
            Set(v->l,ss,mid,t);
        }else if(t.Get(ss)>v->p.Get(ss)&&t.Get(mid)>v->p.Get(mid)){
            Set(v->r,mid+1,se,t);
        }else if(t.Get(ss)<v->p.Get(ss)&&t.Get(mid)>v->p.Get(mid)){
            Set(v->l,ss,mid,t);
        }else{
            swap(t,v->p);
            Set(v->r,mid+1,se,t);
        }
    }

    ll Get(pnode &v,ll ss,ll se,ll x){
        if(v==nullptr)return INF;
        if(ss==se)return v->p.Get(x);

        ll mid=(ss+se)>>1LL;
        if(x<=mid)return min(v->p.Get(x),Get(v->l,ss,mid,x));
        return min(v->p.Get(x),Get(v->r,mid+1,se,x));
    }
};

LiChao_min<M>tree;
int n;
ll c,h[N],dp[N];

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n>>c;

    for(int i=1;i<=n;i++)cin>>h[i];

    dp[1]=0;
    tree.Set(-2LL*h[1],h[1]*h[1]);

    for(int i=2;i<=n;i++){
        dp[i]=tree.Get(h[i])+h[i]*h[i]+c;
        tree.Set(-2LL*h[i],dp[i]+h[i]*h[i]);
    }
    cout<<dp[n];
    return 0;
}

Submission Info

Submission Time
Task Z - Frog 3
User Vasiljko
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2255 Byte
Status WA
Exec Time 81 ms
Memory 12800 KiB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 29
WA × 10
Set Name Test Cases
All 0_00, 0_01, 0_02, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17, 1_18, 1_19, 1_20, 1_21, 1_22, 1_23, 1_24, 1_25, 1_26, 1_27, 1_28, 1_29, 1_30, 1_31, 1_32, 1_33, 1_34, 1_35
Case Name Status Exec Time Memory
0_00 AC 1 ms 256 KiB
0_01 AC 1 ms 256 KiB
0_02 AC 1 ms 256 KiB
1_00 AC 1 ms 256 KiB
1_01 AC 1 ms 256 KiB
1_02 AC 74 ms 12800 KiB
1_03 AC 75 ms 12544 KiB
1_04 WA 81 ms 12672 KiB
1_05 WA 79 ms 11776 KiB
1_06 AC 56 ms 8320 KiB
1_07 AC 75 ms 12672 KiB
1_08 AC 74 ms 9984 KiB
1_09 AC 75 ms 9856 KiB
1_10 WA 79 ms 9984 KiB
1_11 WA 78 ms 9856 KiB
1_12 WA 78 ms 9600 KiB
1_13 WA 78 ms 9344 KiB
1_14 WA 77 ms 9344 KiB
1_15 AC 76 ms 9216 KiB
1_16 AC 67 ms 8192 KiB
1_17 AC 59 ms 6912 KiB
1_18 AC 50 ms 5760 KiB
1_19 WA 62 ms 9600 KiB
1_20 AC 63 ms 8576 KiB
1_21 AC 63 ms 8320 KiB
1_22 AC 55 ms 6144 KiB
1_23 AC 58 ms 7296 KiB
1_24 AC 53 ms 6016 KiB
1_25 AC 62 ms 8448 KiB
1_26 AC 68 ms 9344 KiB
1_27 AC 60 ms 7168 KiB
1_28 AC 63 ms 8192 KiB
1_29 WA 63 ms 8192 KiB
1_30 WA 71 ms 8448 KiB
1_31 AC 61 ms 8192 KiB
1_32 AC 51 ms 5632 KiB
1_33 AC 70 ms 10368 KiB
1_34 AC 57 ms 7040 KiB
1_35 AC 58 ms 7040 KiB