Submission #1173092

#TimeUsernameProblemLanguageResultExecution timeMemory
1173092ZeroCoolBuilding Bridges (CEOI17_building)C++20
60 / 100
48 ms10168 KiB
#include <bits/stdc++.h>
#define int long long
#define ll long long
#define ld long double
#define ar array
#define all(v) v.begin(), v.end()

using namespace std;

const int N = 1e5 + 20;
const int LOG = 30;
const int INF = 1e17;

struct Koce{
    int m, b;

    int operator()(int x){
        return m * x + b;
    }

};

Koce inf{(int)-1e12, (int)-1e17};

vector<Koce> s = {inf};
vector<int> le = {0};
vector<int> ri = {0};

int L(int x){
    if(le[x])return le[x];
    le[x] = s.size();
    s.push_back(inf);
    le.push_back(0);
    ri.push_back(0);
    return le[x];
}

int R(int x){
    if(ri[x])return ri[x];
    ri[x] = s.size();
    s.push_back(inf);
    le.push_back(0);
    ri.push_back(0);
    return ri[x];
}

void upd(int k,int tl,int tr, Koce l){
    if(tl == tr){
        if(l(tl) > s[k](tl))s[k] = l;
        return;
    }
    int tm = (tl + tr) / 2;
    if(s[k].m > l.m)swap(s[k], l);
    if(s[k](tm) < l(tm)){
        swap(s[k], l);
        upd(L(k), tl, tm, l);
    }else upd(R(k), tm + 1, tr, l);
}

int qry(int k,int tl,int tr,int x){
    if(tl== tr)return s[k](x);
    int tm = (tl + tr) / 2;
    if(x <= tm)return max(s[k](x), (le[k] ? qry(le[k], tl, tm, x) : -INF));
    else return max(s[k](x), (ri[k] ? qry(ri[k], tm + 1, tr, x) : -INF));
}

signed main(){ios_base::sync_with_stdio(false);cin.tie(0);
    int n;
    cin>>n;
    int A[n], B[n];
    for(int i = 0;i < n;i++)cin>>A[i];
    int sum = 0;
    for(int i = 0;i < n;i++)cin>>B[i], sum += B[i];
    int dp[n];
    dp[0] = -B[0];
    for(int i = 1;i < n;i++){
        upd(0, 0, N - 1, {2 * A[i - 1], -dp[i - 1] - A[i - 1] * A[i - 1]});
        dp[i] = -qry(0, 0, N - 1, A[i]) - B[i] + A[i] * A[i];
    }
    cout<<dp[n -1] + sum;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...