作者:
hpstory
,
2022-06-23 21:12:21
,
所有人可见
,
阅读 1
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 40;
int n;
int q[N];
vector<int> level[N];
int get_min(int left, int right){
int res = left;
for (int i = left; i <= right; i ++ )
if (q[res] > q[i])
res = i;
return res;
}
void dfs(int left, int right, int d){
if (left > right) return;
int root = get_min(left, right);
level[d].push_back(q[root]);
dfs(left, root - 1, d + 1);
dfs(root + 1, right, d + 1);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) cin >> q[i];
dfs(0, n - 1, 0);
for (int i = 0; level[i].size(); i ++ )
for (int x: level[i])
cout << x << ' ';
return 0;
}