Submission #159324

#TimeUsernameProblemLanguageResultExecution timeMemory
159324fedoseevtimofeyCandies (JOI18_candies)C++14
100 / 100
625 ms32964 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; struct Pt { int l, r; ll sum; bool operator <(const Pt &other) const { if (sum != other.sum) return sum > other.sum; return l < other.l; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.setf(ios::fixed); cout.precision(20); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int n; cin >> n; vector <int> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; vector <ll> pref(n + 1); for (int i = 0; i < n; ++i) pref[i + 1] = pref[i] + a[i]; auto getSum = [&] (int l, int r) { return pref[r + 1] - pref[l]; }; set <Pt> q; for (int i = 0; i < n; ++i) q.insert({i, i, a[i]}); vector <int> mL(n), mR(n); for (int i = 0; i < n; ++i) { mL[i] = i; mR[i] = i; } map <pair <int, int>, ll> sum; for (int i = 0; i < n; ++i) sum[{i, i}] = a[i]; ll ans = 0; for (int i = 1; i <= (n + 1) / 2; ++i) { auto cur = *q.begin(); q.erase(q.begin()); ans += cur.sum; cout << ans << '\n'; int cl = cur.l, cr = cur.r; mR[cl] = mL[cr] = -1; ll cs = -cur.sum; int x = cur.r + 1; if (x < n) { int tl = x; int tr = mR[tl]; if (tr != -1) { ll ts = sum[{tl, tr}]; q.erase({tl, tr, ts}); cr = tr; cs += ts; mR[tl] = mL[tr] = -1; } } x = cur.l - 1; if (x >= 0) { int tr = x; int tl = mL[tr]; if (tl != -1) { ll ts = sum[{tl, tr}]; q.erase({tl, tr, ts}); cl = tl; cs += ts; mR[tl] = mL[tr] = -1; } } if (cl != cur.l && cr != cur.r) { mR[cl] = cr; mL[cr] = cl; sum[{cl, cr}] = cs; q.insert({cl, cr, cs}); } } }

Compilation message (stderr)

candies.cpp: In function 'int main()':
candies.cpp:28:10: warning: variable 'getSum' set but not used [-Wunused-but-set-variable]
     auto getSum = [&] (int l, int r) {
          ^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...