Submission #1172097

#TimeUsernameProblemLanguageResultExecution timeMemory
1172097AlgorithmWarriorBuilding Bridges (CEOI17_building)C++20
100 / 100
80 ms64584 KiB
#include <bits/stdc++.h>

using namespace std;

long long const INF=1e18;
int const MAX=1e6+5;

struct line{
    long long a,b;
    line(){
        a=0;
        b=INF;
    }
    long long eval(long long x){
        return a*x+b;
    }
};

struct LiChao{
    line v[4*MAX];
    void update(int nod,int st,int dr,line ec){
        int mij=(st+dr)/2;
        if(ec.eval(mij)<v[nod].eval(mij))
            swap(ec,v[nod]);
        if(st<dr){
            if(ec.eval(st)<v[nod].eval(st))
                update(2*nod,st,mij,ec);
            else
                update(2*nod+1,mij+1,dr,ec);
        }
    }
    long long query(int nod,int st,int dr,int poz){
        long long ans=v[nod].eval(poz);
        if(st<dr){
            int mij=(st+dr)/2;
            long long rez;
            if(poz<=mij)
                rez=query(2*nod,st,mij,poz);
            else
                rez=query(2*nod+1,mij+1,dr,poz);
            if(ans>rez)
                ans=rez;
        }
        return ans;
    }
}lichao;

int n;
int h[MAX],w[MAX];

void read(){
    cin>>n;
    int i;
    for(i=1;i<=n;++i)
        cin>>h[i];
    for(i=1;i<=n;++i)
        cin>>w[i];
}

long long dp[MAX];

long long get_dp(){
    int i;
    dp[1]=-w[1];
    line add;
    add.a=-2*h[1];
    add.b=dp[1]+1LL*h[1]*h[1];
    lichao.update(1,0,MAX-5,add);
    for(i=2;i<=n;++i){
        dp[i]=lichao.query(1,0,MAX-5,h[i])+1LL*h[i]*h[i]-w[i];
        add.a=-2*h[i];
        add.b=dp[i]+1LL*h[i]*h[i];
        lichao.update(1,0,MAX-5,add);
    }
    return dp[n];
}

long long solve(){
    long long rez=get_dp();
    int i;
    for(i=1;i<=n;++i)
        rez+=w[i];
    return rez;
}

int main()
{
    read();
    cout<<solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...