Submission #1260238

#TimeUsernameProblemLanguageResultExecution timeMemory
1260238tvgkCandies (JOI18_candies)C++20
100 / 100
197 ms19160 KiB
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e5 + 7;

int n;
ll a[mxN];
ii dsu[mxN];
set<ii> s;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);

    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        dsu[i] = {i, i};
        s.insert({a[i], i});
    }
    dsu[n + 1] = {n + 1, n + 1};

    ll ans = 0;
    while (s.size())
    {
        ii j = *s.rbegin();
        s.erase(j);

        ans += j.fi;
        cout << ans << '\n';

        int u = dsu[dsu[j.se].fi - 1].fi;
        int v = dsu[j.se].se + 1;
        s.erase({a[u], u});
        s.erase({a[v], v});

        a[u] += a[v] - j.fi;
        v = dsu[v].se;
        dsu[u].se = v;
        dsu[v].fi = u;

        if (u && v <= n)
            s.insert({a[u], u});
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...