Submission #1246264

#TimeUsernameProblemLanguageResultExecution timeMemory
1246264duckindogCandies (JOI18_candies)C++20
100 / 100
70 ms8372 KiB
#include <bits/stdc++.h> using namespace std; const int N = 200'000 + 10; int n; long long a[N]; bool isDel[N]; int nxt[N], pre[N]; int32_t main() { cin.tie(0)->sync_with_stdio(0); cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; iota(nxt + 1, nxt + n + 1, 2); iota(pre + 1, pre + n + 1, 0); priority_queue<pair<long long, int>> q; for (int i = 1; i <= n; ++i) q.push({a[i], i}); a[0] = a[n + 1] = -1'000'000'000'000'000'000; long long answer = 0; for (int i = 1; i <= (n + 1) / 2; ++i) { while (q.size() && isDel[q.top().second]) q.pop(); auto [value, id] = q.top(); q.pop(); answer += value; a[id] = -a[id] + a[pre[id]] + a[nxt[id]]; q.push({a[id], id}); isDel[pre[id]] = isDel[nxt[id]] = true; nxt[pre[pre[id]]] = id; pre[nxt[nxt[id]]] = id; pre[id] = pre[pre[id]]; nxt[id] = nxt[nxt[id]]; cout << answer << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...