题目:
点击打开链接
#include<iostream>
using namespace std;
int main(){
int A[50],left[50]={0},right[50]={0},order[50],i,j,x,y,n,root;
cin>>n;
root=1;
for(i=1;i<=n;i++) cin>>A[i];
if(n==1){cout<<A[1]<<endl<<"YES"<<endl;return 0;}
for(i=2;i<=n;i++){
x=root;
while(x){
y=x;
if(A[i]>A[x]) x=left[x];
else x=right[x];
}
if(A[i]>A[y]) left[y]=i;
else right[y]=i;
}
i=x=1;
order[1]=root;
while(x<n){
if(left[order[i]]) order[++x]=left[order[i]];
if(right[order[i]]) order[++x]=right[order[i]];
i++;
}
int ans=1;
x=n/2;
for(i=1;i<=x-1;i++) if(left[order[i]]==0||right[order[i]]==0) ans=0;
if(n%2){
if(left[order[x]]==0||left[order[x]]==0) ans=0;
}
if(n%2==0){
if(left[order[x]]==0) ans=0;
}
for(i=1;i<n;i++) cout<<A[order[i]]<<" ";
cout<<A[order[n]]<<endl;
if(ans) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}