| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1146157 | wikidere | Building Bridges (CEOI17_building) | C++17 | 0 ms | 0 KiB | 
#include <iostream>
#include <vector>
#include <deque>
#include <limits>
using namespace std;
struct Pillar {
    int index;
    long long cost;
};
int main() {
    int n;
    cin >> n;
    vector<int> h(n), w(n);
    for (int i = 0; i < n; i++) cin >> h[i];
    for (int i = 0; i < n; i++) cin >> w[i];
    vector<long long> dp(n, LLONG_MAX);
    dp[0] = w[0];
    deque<Pillar> dq;
    dq.push_back({0, dp[0]});
    for (int i = 1; i < n; i++) {
        while (!dq.empty() && dq.front().index < i) {
            dq.pop_front();
        }
        
        dp[i] = dq.front().cost + (h[i] - h[dq.front().index]) * (h[i] - h[dq.front().index]);
        dp[i] += w[i];
        
        while (!dq.empty() && dq.back().cost >= dp[i]) {
            dq.pop_back();
        }
        dq.push_back({i, dp[i]});
    }
    
    cout << dp[n-1] << endl;
    return 0;
}
