Submission #1264354

#TimeUsernameProblemLanguageResultExecution timeMemory
1264354nguyenhuythachCandies (JOI18_candies)C++20
8 / 100
11 ms1860 KiB
#include<bits/stdc++.h>
#include<algorithm>
#include<random>
#include<chrono>
#include<cstdlib>
#include<ctime>
#include<numeric>
#include<vector>
#include<stack>
#include<map>
#include<set>
#include<queue>
#include<iomanip>
#define int long long
#define ll long long
#define L LLONG_MAX
#define fi first
#define se second
#define pii pair<int,int>
#define sz(a) ((int)a.size())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define REP(i,k,j) for(int i=k;i>=j;i--)
#define FORD(i,a) for(auto i:a)
#define rngdcl mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count())
#define random(l,r) ((l)+(rng()%(r-l+1)))
using namespace std;
const int nmax=2e5+1;
int n;
int a[nmax],lf[nmax],rt[nmax],st[nmax];
priority_queue<pii,vector<pii>> pq;

void input()
{
    cin >> n;
    FOR(i,1,n) cin >> a[i];
    a[0]=a[n+1]=-1e18;
    FOR(i,1,n)
    {
        lf[i]=i-1;
        rt[i]=i+1;
        pq.push({a[i],i});
    }
}

void solve()
{
    int ans=0;
    FOR(i,1,(n+1)/2)
    {
        while(pq.size() && st[pq.top().se]) pq.pop();
        int val = pq.top().fi;
        int idx = pq.top().se;
        pq.pop();
        ans += val;
        a[idx] = a[lf[idx]]+a[rt[idx]]-a[idx];
        pq.push({a[idx],idx});
        cout << ans << "\n";
        st[lf[idx]] = 1;
        st[rt[idx]] = 1;
        lf[idx] = lf[lf[idx]];
        rt[idx] = rt[rt[idx]];
        lf[rt[idx]] = idx;
        rt[lf[idx]] = idx;
    }
}

signed main()
{
    //freopen(".inp", "r", stdin);
    //freopen(".out", "w", stdout);
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    input();
    solve();
}


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