Submission #1216539

#TimeUsernameProblemLanguageResultExecution timeMemory
1216539quangminh412Building Bridges (CEOI17_building)C++20
30 / 100
3094 ms65424 KiB
#include <bits/stdc++.h> using namespace std; /* Ben Watson Handle codeforces : quangminh98 Mua Code nhu mua Florentino !! */ #define ll long long const string name = "test"; void solve(); signed main() { if (fopen((name + ".inp").c_str(), "r")) { freopen((name + ".inp").c_str(), "r", stdin); freopen((name + ".out").c_str(), "w", stdout); } ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); return 0; } // main program const ll oo = 0x3f3f3f3f3f3f3f3f; struct LiChao { struct line { int a; ll b; line() : a(0), b(oo) {}; line(int a, ll b) : a(a), b(b) {}; ll calc(int x) { return 1ll * a * x + b; } }; vector<line> st; int n; LiChao(int n) : n(n) { st.resize(4 * n + 1); } void add(int head, int l, int r, line seg) { if (l == r) { if (seg.calc(l) < st[head].calc(l)) swap(seg, st[head]); return; } int mid = l + r >> 1; if (seg.a < st[head].a) swap(seg, st[head]); if (seg.calc(mid) < st[head].calc(mid)) { swap(seg, st[head]); add(head << 1 | 1, mid + 1, r, seg); } add(head << 1, l, mid, seg); } void add(int a, ll b) { add(1, 1, n, line(a, b)); } ll query(int head, int l, int r, int pos) { if (l == r) return st[head].calc(pos); int mid = l + r >> 1; if (pos <= mid) return min(st[head].calc(pos), query(head << 1, l, mid, pos)); return min(st[head].calc(pos), query(head << 1 | 1, mid + 1, r, pos)); } ll query(int pos) { return query(1, 1, n, pos); } }; void solve() { int n; cin >> n; int h[n + 1], w[n + 1]; vector<ll> prefix(n + 1, 0); for (int i = 1; i <= n; i++) cin >> h[i]; for (int i = 1; i <= n; i++) { cin >> w[i]; prefix[i] = prefix[i - 1] + w[i]; } LiChao lichao(1e6); vector<ll> dp(n + 1, 0); lichao.add(-2 * h[1], -prefix[1] + 1ll * h[1] * h[1]); for (int i = 2; i <= n; i++) { dp[i] = prefix[i - 1] + 1ll * h[i] * h[i] + lichao.query(h[i]); lichao.add(-2 * h[i], -prefix[i] + 1ll * h[i] * h[i] + dp[i]); } cout << dp[n] << '\n'; }

Compilation message (stderr)

building.cpp: In function 'int main()':
building.cpp:20:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |         freopen((name + ".inp").c_str(), "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
building.cpp:21:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         freopen((name + ".out").c_str(), "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...