# | TimeUTC-0 | 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]);