Submission #287843

#TimeUsernameProblemLanguageResultExecution timeMemory
287843nandonathanielSwap (BOI16_swap)C++14
100 / 100
970 ms3832 KiB
#include<bits/stdc++.h>
using namespace std;

int n,arr[200005];

int cari(int i,int a){
	if(i*2>n)return 0;
	int d=arr[2*i];
	if(i*2+1>n)return d<a;
	int e=arr[2*i+1];
	if(a<d && a<e)return 0;
	if(d<a && d<e)return 1+cari(2*i,a);
	if(a<d){
		return min(cari(2*i,a),cari(2*i+1,a))+1;
	}
	int l1=cari(2*i,d),l2=cari(2*i+1,d);
	if(l1<=l2)return 1+cari(2*i+1,a);
	else return 1+cari(2*i,a);
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	cin >> n;
	for(int i=1;i<=n;i++)cin >> arr[i];
	arr[n+1]=1e9;
	for(int i=1;2*i<=n;i++){
		int a=arr[i],b=arr[2*i],c=arr[2*i+1];
		if(a<b && a<c)continue;
		if(b<a && b<c){
			swap(arr[i],arr[2*i]);
			continue;
		}
		if(a>b)swap(a,b);
		if(cari(2*i,a)>cari(2*i+1,a))swap(a,b);
		arr[i]=c;
		arr[2*i]=a;
		arr[2*i+1]=b;
	}
	for(int i=1;i<=n;i++){
		cout << arr[i];
		if(i<n)cout << " ";
		else cout << '\n';
	}
	return 0;
}

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