Time Limit: 2000MS | Memory Limit: 262144KB | 64bit IO Format: %I64d & %I64u |
Description
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 ndistinct integers, that is used to construct the binary search tree. Below is the formal description of the construction process.
Input
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
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.
Sample Input
3 1 2 3
1 2
5 4 2 3 1 6
4 2 2 4
Sample Output
Hint
Source
#include<stdio.h>
#include<string.h>
#include<set>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
set<int>t;
set<int>::iterator it;
set<int>::iterator it1;
set<int>::iterator it2;
map<int,int>pos;
int main()
{
int n,x;
while(scanf("%d",&n)!=EOF)
{
t.clear();
int T=1;
scanf("%d",&x);
t.insert(0);t.insert(x);
pos[x]=T++;
while(T<=n)
{
scanf("%d",&x);
it=t.lower_bound(x);
it1=it--;it2=it;
if(pos[*it1]<pos[*it2])
printf("%d ",*it2);
else
printf("%d ",*it1);
t.insert(x);
pos[x]=T++;
}
}
return 0;
}