제출 #1124508

#제출 시각아이디문제언어결과실행 시간메모리
1124508fryingducCandies (JOI18_candies)C++20
0 / 100
1 ms320 KiB
#include "bits/stdc++.h" using namespace std; #ifdef duc_debug #include "D:\\debug.h" #else #define debug(...) #endif const int maxn = 2e5 + 5; int n; long long a[maxn]; int pref[maxn], suf[maxn]; bool mark[maxn]; void solve() { cin >> n; for(int i = 1; i <= n; ++i) { cin >> a[i]; if(i > 1) pref[i] = i - 1; if(i < n) suf[i] = i + 1; } priority_queue<pair<long long, int>> pq; for(int i = 1; i <= n; ++i) { pq.push(make_pair(a[i], i)); } long long res = 0; for(int i = 1; i <= (n + 1) / 2; ++i) { bool flag = 0; while(!pq.empty() and !flag) { pair<long long, int> t = pq.top(); pq.pop(); if(mark[t.second]) continue; flag = 1; res += t.first; int lst = pref[t.second], nxt = suf[t.second]; debug(i, t, lst, nxt, a[t.second]); a[t.second] = a[lst] + a[nxt] - a[t.second]; mark[lst] = mark[nxt] = 1; pref[t.second] = pref[pref[t.second]]; suf[t.second] = suf[suf[t.second]]; pref[suf[t.second]] = t.second; suf[pref[t.second]] = t.second; pq.push(make_pair(a[t.second], t.second)); } cout << res << '\n'; } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...