Submission #1240229

#TimeUsernameProblemLanguageResultExecution timeMemory
1240229caterpillowCandies (JOI18_candies)C++17
100 / 100
210 ms21208 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { cin.tie(0)->sync_with_stdio(0); int n; cin >> n; vector<ll> a(n); for (ll &x : a) cin >> x; vector<vector<ll>> pfx(2, vector<ll>(n + 1)); for (int i = 0; i < n; i++) pfx[i % 2][i + 1] = a[i]; for (int i = 0; i < 2; i++) { for (int j = 0; j < n; j++) { pfx[i][j + 1] += pfx[i][j]; } } auto sum_seg = [&] (int l, int r) { return pfx[l % 2][r] - pfx[l % 2][l]; }; set<int> segs; for (int i = -1; i <= n + 1; i++) segs.insert(i); using t3 = tuple<ll, int, int>; // gain, l, r priority_queue<t3> pq; for (int i = 0; i < n; i++) pq.push({a[i], i, i + 1}); ll ans = 0; for (int _ = 1; _ <= (n + 1) / 2; _++) { while (true) { auto [gain, l, r] = pq.top(); pq.pop(); auto lit = segs.find(l); auto rit = segs.find(r); if (lit == segs.end() || rit == segs.end()) continue; ans += gain; if (lit != segs.begin()) segs.erase(lit--); if (next(rit) != segs.end()) segs.erase(rit++); if (*lit >= 0 && *rit <= n) pq.push({sum_seg(*lit, *rit) - sum_seg(*lit + 1, *rit - 1), *lit, *rit}); break; } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...