题意:
给你
n
个数,用这
分析:
首先要注意本题的
n
个数都是不同的。
容易观察到每次插入节点时,它的父亲节点要么是比它大的数中,距它最近的节点
这里的主要问题是到底是
首先我们应该知道这
这样必定只有两种情况:
1.
r
的左儿子是
2.
用set维护得到
l
和
#include <iostream>
#include <set>
#include <map>
using namespace std;
map<int, int> le, ri;
int n, x;
set<int> st;
set<int>::iterator r, l;
int main() {
cin >> n;
cin >> x;
st.insert(x);
for (int i = 0; i < n - 1; i++) {
cin >> x;
r = st.upper_bound(x);
if (r != st.begin()) l = --r, ++r;
else l = st.end();
if (r == st.end()) {
cout << *l << " ";
ri[*l]++;
} else if (l == st.end()) {
cout << *r << " ";
le[*r]++;
} else {
if (ri.count(*l)) {
cout << *r << " ";
le[*r]++;
} else {
cout << *l << " ";
ri[*l]++;
}
}
st.insert(x);
}
cout << endl;
return 0;
}