【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

做这题之前先要知道二叉排序树的一个性质。
就是它的中序遍历的结果就是这个数组升序排序。
(且每个节点的左边的节点都是比这个节点的值小的,每个节点的右边的节点都是比这个节点的值大的。

则我们把原数组排序。

然后在这里面找到原来数组的a[1]的位置idx;

则1..idx-1这些数字都是a[1]的左子树。

idx+1..n这些数字都是a[1]的右子树。

然后idx的左儿子是什么呢?

肯定就是1..idx-1中在原数组中最早出现的数字。

(因为最早出现,且又比它小。

那么肯定就在根节点的左儿子上了。

那么idx的右儿子呢?

会发现也是idx+1..n中出现最早的数字.

(比它大,且又出现得最早.所以肯定是它的右儿子。

然后就会发现。这是一个递归的过程了。

每个儿子接下来都是这样的。

只需用线段树。维护所有区间内最早出现的数字即可(也即 下标最小的数字

【代码】

#include <bits/stdc++.h>
#define ll long long
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std; const int N = 1e5; int n,mi[N<<2]; struct abc{
int id,x; bool operator < (const abc &b) const{
return x < b.x;
}
}a[N+10]; int tag[N+10],fa[N+10],b[N+10]; void build(int l = 1,int r = n,int rt = 1){
if (l==r){
mi[rt] = l;
return;
}
int mid = (l+r)>>1;
build(lson);
build(rson);
int lx = mi[rt<<1],rx = mi[rt<<1|1];
if (a[lx].id<a[rx].id){
mi[rt] = lx;
}else mi[rt] = rx;
} int query(int L,int R,int l = 1,int r = n,int rt=1){ if (L<=l && r <= R){
return mi[rt];
}
int mid = (l+r)>>1;
int id =-1; if (L<=mid){
id = query(L,R,lson);
}
if (mid<R){
int temp1 = query(L,R,rson);
if (id==-1) id = temp1;
else if (a[temp1].id<a[id].id) id = temp1;
}
return id;
} void dfs(int l,int r,int f){
int idx = query(l,r);
fa[a[idx].id] = f;
if (idx<r) dfs(idx+1,r,a[idx].id);
if (l<idx) dfs(l,idx-1,a[idx].id);
} int main()
{
ios::sync_with_stdio(0),cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("rush.txt","r",stdin);
#endif // LOCAL_DEFINE
cin >> n;
for (int i = 1;i <= n;i++){
cin >> a[i].x;
a[i].id = i;
b[i] = a[i].x;
}
sort(a+1,a+1+n);
build();
dfs(1,n,0);
for (int i = 2;i <= n;i++)
cout << b[fa[i]]<<' ';
return 0;
}

最新文章

  1. 参数*args和**args区别
  2. CSS3属性border-radius绘制多种多样的图形
  3. ArcGIS Server开发教程系列(8)ArcGIS API for Javascript-控件(小部件)(续)纯代码
  4. Digital Imaging Processing 数字图像处理
  5. Ubantu16.4的安装过程以及基本配置
  6. php 中cookie和session的用法比较
  7. WebService的发布及客户端的调用
  8. VLV INDEX
  9. jquery 中 fn.apply(this, arguments)是什么函数?有什么作用?能举个例子吗
  10. Error D8016 &#39;/ZI&#39; and &#39;/Gy-&#39; command-line options are incompatible
  11. iOS开发UI篇—ios应用数据存储方式(归档) :转发
  12. 体验 WebFont,网页上的艺术字
  13. POJ 2388
  14. 解决 iPhone 微信 H5 无法自动播放音乐问题
  15. JS 禁止Ctrl+C + 禁止右键操作
  16. opencv实现坐标旋转(教你框住小姐姐)
  17. [转帖]git命令参考手册
  18. 前端框架VUE----表单输入绑定
  19. LeetCode--342--4的幂
  20. MongoDB(课时3 MongoDB基本操作)

热门文章

  1. Effective JavaScript Item 34 在prototype上保存方法
  2. hpuoj--校赛--考试来了(水题)
  3. 面向对象(OOP)五大基本原则
  4. HD-ACM算法专攻系列(3)——Least Common Multiple
  5. C语言基础-第五章
  6. Android 代码中使用Color工具类 parseColor
  7. linux 下 .sh 文件语法
  8. [洛谷P3121] 审查(黄金) (AC自动机)
  9. Linux Network配置
  10. ArcGIS api for javascript——明确的创建图层列表