Submission #157853

#TimeUsernameProblemLanguageResultExecution timeMemory
157853dolphingarlicAliens (IOI16_aliens)C++14
100 / 100
123 ms6540 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define pii pair<int, int> #define pli pair<ll, int> #define x first #define y second const int mxN = 1e5; int qh, qt, a[mxN], c[mxN]; ll b[mxN]; pii ps1[mxN]; vector<pii> ps2; inline void al(int ai, ll bi, int ci) { while (qt - qh > 1 && pli((b[qt - 1] - b[qt - 2]) * (a[qt - 1] - ai), c[qt - 1]) > pli((bi - b[qt - 1]) * (a[qt - 2] - a[qt - 1]), ci)) --qt; a[qt] = ai, b[qt] = bi, c[qt] = ci; ++qt; } inline pli qry(ll xi) { while (qt - qh > 1 && pli(a[qh + 1] * xi + b[qh + 1], c[qh + 1]) < pli(a[qh] * xi + b[qh], c[qh])) ++qh; return pli(a[qh] * xi + b[qh], c[qh]); } inline pli ddp(ll c) { qh = qt = 0; pli dp; for (int i = 0; i < ps2.size(); ++i) { ll d1 = max(i ? ps2[i - 1].x - ps2[i].y + 1 : 0, 0), d2 = ps2[i].y; al(-2 * d2, dp.x - d1 * d1 + d2 * d2, dp.y); d1 = ps2[i].x + 1; dp = qry(d1); dp.x += d1 * d1 + c, ++dp.y; } return dp; } ll take_photos(int n, int m, int k, vector<int> r, vector<int> c) { for (int i = 0; i < n; ++i) { ps1[i] = {r[i], c[i]}; if (ps1[i].y > ps1[i].x) swap(ps1[i].y, ps1[i].x); } sort(ps1, ps1 + n); ps2.clear(); for (int i = 0; i < n; ++i) { while (!ps2.empty() && ps1[i].y <= ps2.back().y) ps2.pop_back(); ps2.push_back(ps1[i]); } ll lb = 0, rb = (ll)m * m, ans; while (lb <= rb) { ll mb = (lb + rb) / 2; pli dp = ddp(mb); if (dp.y <= k) { ans = dp.x; rb = mb - 1; } else lb = mb + 1; } return ans - lb * k; }

Compilation message (stderr)

aliens.cpp: In function 'std::pair<long long int, int> ddp(ll)':
aliens.cpp:35:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < ps2.size(); ++i) {
                     ~~^~~~~~~~~~~~
aliens.cpp: In function 'll take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:66:23: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return ans - lb * k;
                       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...