Submission #237803

#TimeUsernameProblemLanguageResultExecution timeMemory
237803DS007Building Bridges (CEOI17_building)C++14
100 / 100
99 ms65400 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e5 + 5, H = 1e6 + 5; class Line { public: int m, c; Line() { m = 0; c = 1e18; } Line(int m_, int c_) { m = m_; c = c_; } int evaluate(int x) { return m * x + c; } }; class LiChaoTree { Line *t; int n; public: LiChaoTree(int n_) { n = n_; t = new Line[n * 4]; } int insert(int v, int l, int r, Line nl) { if (l == r) return t[v] = nl.evaluate(l) < t[v].evaluate(l) ? nl : t[v], 1; int mid = (l + r) / 2; if (t[v].m > nl.m) swap(t[v], nl); if (t[v].evaluate(mid) > nl.evaluate(mid)) swap(t[v], nl), insert(v * 2 + 1, mid + 1, r, nl); else insert(v * 2, l, mid, nl); } int query(int v, int l, int r, int x) { if (l == r) return t[v].evaluate(x); int mid = (l + r) / 2; if (x < mid) return min(t[v].evaluate(x), query(v * 2, l, mid, x)); else return min(t[v].evaluate(x), query(v * 2 + 1, mid + 1, r, x)); } }; int h[N], w[N], dp[N]; int n, s; int solveTestCase() { cin >> n; for (int i = 0; i < n; i++) cin >> h[i]; for (int i = 0; i < n; i++) cin >> w[i], s += w[i]; LiChaoTree lct(H); dp[0] = -w[0]; lct.insert(1, 0, H, Line(-2 * h[0], dp[0] + h[0] * h[0])); for (int i = 1; i < n; i++) dp[i] = lct.query(1, 0, H, h[i]) + h[i] * h[i] - w[i], lct.insert(1, 0, H, Line(-2 * h[i], dp[i] + h[i] * h[i])); cout << dp[n - 1] + s; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int test = 1; // cin >> test; while (test--) solveTestCase(); }

Compilation message (stderr)

building.cpp: In function 'long long int solveTestCase()':
building.cpp:76:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
building.cpp: In member function 'long long int LiChaoTree::insert(long long int, long long int, long long int, Line)':
building.cpp:46:5: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...