Submission #61256

#TimeUsernameProblemLanguageResultExecution timeMemory
61256DiuvenCandies (JOI18_candies)C++11
100 / 100
701 ms74656 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, int> pli; const int MX=500010, inf=2e9; int n; ll A[MX]; int nxt[MX], prv[MX]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=1; i<=n; i++) cin>>A[i]; iota(nxt+1, nxt+n+1, 2); iota(prv+1, prv+n+1, 0); nxt[0]=1, prv[n+1]=n; // by no mean set<pli> S; for(int i=1; i<=n; i++) S.insert({A[i], i}); ll ans=0; for(int j=1; j<=(n+1)/2; j++){ pli now=*S.rbegin(); S.erase(now); ans+=now.first; cout<<ans<<'\n'; int i=now.second, l=prv[i], r=nxt[i]; if(l==0){ S.erase({A[r], r}); prv[nxt[r]]=0; continue; } if(r==n+1){ S.erase({A[l], l}); nxt[prv[l]]=n+1; continue; } S.erase({A[r], r}); S.erase({A[l], l}); A[i] = A[l] + A[r] - A[i]; S.insert({A[i], i}); prv[nxt[r]]=i; nxt[prv[l]]=i; nxt[i]=nxt[r]; prv[i]=prv[l]; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...