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

【题意】

在这里输入题意

【题解】

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

则我们把原数组排序。

然后在这里面找到原来数组的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;
}

【Henu ACM Round#17 E】Tree Construction的更多相关文章

  1. 【Henu ACM Round#17 F】Upgrading Array

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...

  2. 【Henu ACM Round#17 D】Hexagons!

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 题目的图吓人. 找下规律就会发现从内到外是1,6,12,18 即1,16,26,36... 即1+6(1+2+3+...) 等差求和 ...

  3. 【Henu ACM Round#17 C】Kitahara Haruki's Gift

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 判断sum/2这个价值能不能得到就可以了. 则就是一个01背包模型了. 判断某个价值能否得到. f[j]表示价值j能否得到. f[0 ...

  4. 【Henu ACM Round#17 B】USB Flash Drives

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序,逆序.贪心选较大的就好. [代码] #include <bits/stdc++.h> #define ll lon ...

  5. 【Henu ACM Round#17 A】Simple Game

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是放在m-1或者m+1的. (m-1是左边的点都离a最近,而m+1则是右边的点都离他最近. 看看哪个更好就行 [代码] #inc ...

  6. 【Henu ACM Round#15 E】 A and B and Lecture Rooms

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最近公共祖先. (树上倍增 一开始统计出每个子树的节点个数_size[i] 如果x和y相同. 那么直接输出n. 否则求出x和y的最近 ...

  7. 【Henu ACM Round #13 E】Spy Syndrome 2

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 对m个串建立一棵字典树. 然后对主串. 尝试从第一个位置开始.在字典树中尝试匹配 如果匹配到了位置i 就再从位置i+1开始尝试匹配 ...

  8. 【Henu ACM Round#24 E】Connected Components

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 要求把连续的一段li..ri的边全都删掉. 然后求剩下的图的联通数 如果暴力的话 复杂度显然是O(k*m)级别的. 考虑我们把li. ...

  9. 【Henu ACM Round#24 D】Iterated Linear Function

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把B提取出来就是一个等比数列了. 求和一下会发现是这种形式. \(B*\frac{(A^n-1)}{A-1}+A^n*x\) 则求一 ...

随机推荐

  1. 关于有的Apk无法反编译的探究

    Android的apk包,其实就是zip包,只不过后缀名换了而已!使用“好压”等解压缩工具解压,就可以看到里面的内容了.简单介绍一下吧. 以下就是解压出来的apk的内容: 其中: assets     ...

  2. 解读邮箱正则表达式:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

    转自:http://www.cnblogs.com/joyceTING/archive/2013/05/09/3069089.html正则表达式 \w+([-+.]\w+)*@\w+([-.]\w+) ...

  3. Nginx搭建图片服务器

    Nginx搭建图片服务器 标签(空格分隔): linux,nginx Nginx常用命令 ./nginx 启动 ./nginx -s reload 重载配置文件 ./nginx -s stop|sta ...

  4. 22.允许重复的容器(unordered_multiset)

    #include <string> #include <iostream> #include <unordered_set> using namespace std ...

  5. PC/H5端各浏览器兼容性问题及解决方案?

    概念:所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码解析的差异,造成页面显示效果不统一的情况. 1>不同浏览器的标签默认的外补丁和内补丁不同问题症状:随便写几个标签,不加样式控制的情况 ...

  6. C#派生类中使用基类protected成员的方法

    我们知道C#中通过继承可以使一个具有公共数据和方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员.那么当基类成员被prot ...

  7. 一篇文章助你理解Python2中字符串编码问题

    前几天给大家介绍了unicode编码和utf-8编码的理论知识,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系.下面在Python2环境中进行代码演示,分别Wind ...

  8. jquery validate验证规则重用

    当多个控件验证规则相同时,如何避免冗余代码并应用相同规则呢? [1st way. addMethod+addClassRules] 场景:维护学生档案时需要维护父母.监护人.紧急联系人的身份证号码,此 ...

  9. [POI2010]GIL-Guilds(结论题)

    题意 给一张无向图,要求你用黑白灰给点染色,且满足对于任意一个黑点,至少有一个白点和他相邻:对于任意一个白点,至少有一个黑点与他相邻,对于任意一个灰点,至少同时有一个黑点和白点和灰点与他相邻,问能否成 ...

  10. HDU 4941 Magical Forest (Hash)

    这个题比赛的时候是乱搞的,比赛结束之后学长说是映射+hash才恍然大悟.因此决定好好学一下hash. 题意: M*N的格子,里面有一些格子里面有一个值. 有三种操作: 1.交换两行的值. 2.交换两列 ...