제출 #669283

#제출 시각아이디문제언어결과실행 시간메모리
669283dsyzCandies (JOI18_candies)C++17
100 / 100
110 ms11956 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAXN (1000005)
int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);
	ll N;
	cin>>N;
	ll arr[N + 2];
	bool used[N + 2];
	ll l[N + 2];
	ll r[N + 2];
	priority_queue<pair<ll,ll> > pq;
	memset(used,0,sizeof(used));
	for(ll i = 1;i <= N;i++){
		cin>>arr[i];
		l[i] = i - 1;
		r[i] = i + 1;
		pq.push(make_pair(arr[i],i));
	}
	arr[0] = -1e15;
	arr[N + 1] = -1e15;
	l[0] = 0;
	r[0] = 1;
	l[N + 1] = N;
	r[N + 1] = N + 1;
	ll sum = 0;
	for(ll j = 0;j < (N + 1) / 2;j++){
		while(!pq.empty() && used[pq.top().second] == 1){
			pq.pop();
		}
		ll value = pq.top().first;
		ll i = pq.top().second;
		pq.pop();
		sum += value;
		cout<<sum<<'\n';
		arr[i] = arr[l[i]] + arr[r[i]] - arr[i];
		used[l[i]] = 1;
		used[r[i]] = 1;
		pq.push(make_pair(arr[i],i));
		l[i] = l[l[i]];
		r[l[i]] = i;
		r[i] = r[r[i]];
		l[r[i]] = i;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...