Submission #749211

#TimeUsernameProblemLanguageResultExecution timeMemory
749211stevancvCandies (JOI18_candies)C++14
100 / 100
654 ms30436 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define sp ' '
#define en '\n'
#define smin(a, b) a = min(a, b)
#define smax(a, b) a = max(a, b)
using namespace std;
const int N = 1e5 + 2;
const ll linf = 1e18;
set<pair<ll, ll>> a, b;
void Add(ll x, ll y) {
    a.insert({x, y});
    b.insert({y, x});
}
void Rem(ll x, ll y) {
    a.erase({x, y});
    b.erase({y, x});
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n; cin >> n;
    vector<ll> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
        Add(i, v[i]);
    }
    Add(-1, -linf); Add(n, -linf);
    ll ans = 0;
    for (int i = 0; i < (n + 1) / 2; i++) {
        auto it = b.rbegin();
        auto o = *it;
        ans += o.first;
        cout << ans << en;
        auto itt = a.lower_bound({o.second, o.first});
        auto x = *prev(itt);
        auto y = *itt;
        auto z = *next(itt);
        Rem(x.first, x.second);
        Rem(y.first, y.second);
        Rem(z.first, z.second);
        Add(y.first, x.second + z.second - y.second);
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...