During the programming classes Vasya was assigned a difficult problem. However, he doesn't know how to code and was unable to find the solution in the Internet, so he asks you to help.
You are given a sequence a, consisting of n distinct integers, that is used to construct the binary search tree. Below is the formal description of the construction process.
The first line of the input contains a single integer n (2 ≤ n ≤ 100 000) — the length of the sequence a.
The second line contains n distinct integers ai (1 ≤ ai ≤ 109) — the sequence a itself.
Output n - 1 integers. For all i > 1 print the value written in the node that is the parent of the node with value ai in it.
31 2 3
1 2
54 2 3 1 6
4 2 2 4
#include<stdio.h> #include<set> #include<map> using namespace std; int main() { set<int> sorted_tree; map<int, int> left; map<int, int> right; int n,x; scanf("%d", &n); scanf("%d", &x); sorted_tree.insert(x); for (int i = 1; i < n; i++) { scanf("%d", &x); auto it = sorted_tree.upper_bound(x); if (it == sorted_tree.end()) { printf("%d ", *(--it)); right[*it] = x; } else { if (left[*it] == 0) { printf("%d ", *it); left[*it] = x; } else { printf("%d ", *(--it)); right[*it] = x; } } sorted_tree.insert(x); } printf("\n"); return 0; }注意:set里面的元素是不重复的,插入元素后是有序的