【代码】

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = ;
//Tkey为输入主键与辅键的结构体
//key表示主键,aux表示辅键,index表示是输入的第几个结点
struct Tkey {
int key, aux, index;
} keys[maxn];
//Tnode是BST结点的结构体,key表示主键,aux表示辅键
//father表示父结点的编号,leftChild和rightChild表示左右儿子结点
struct Tnode {
int key, aux, father, leftChild, rightChild;
} node[maxn];
int n; //排序的比较函数
bool cmp(const Tkey &a, const Tkey &b) {
return a.key < b.key;
} int main() {
//读入数据
int i;
scanf("%d", &n);
for (i = ; i <= n; ++i) {
scanf("%d%d", &keys[i].key, &keys[i].aux);
keys[i].index = i;
} //按key对结点排序
sort(keys + , keys + n + , cmp); //按key从小到大将结点插入BST
//father表示当前插入结点的父节点,leftChild表示当前插入结点的左儿子节点
//rightMost表示每次插入前BST最右的结点
int p, father, leftChild, rightMost = ;
for (i = ; i <= n; ++i) {
//寻找插入结点的父亲与左儿子
leftChild = ; father = rightMost;
while (father != && node[father].aux > keys[i].aux) {
leftChild = father;
father = node[father].father;
}
//将结点插入BST
p = keys[i].index;
node[p].key = keys[i].key;
node[p].aux = keys[i].aux;
node[p].father = father;
node[p].leftChild = leftChild;
node[p].rightChild = ;
if (father != )
node[father].rightChild = p;
if (leftChild != )
node[leftChild].father = p;
rightMost = keys[i].index;
} //输出答案
printf("YES\n");
for (i = ; i <= n; ++i)
printf("%d %d %d\n", node[i].father, node[i].leftChild, node[i].rightChild);
return ;
}

OpenJudge Cartesian Tree的更多相关文章

  1. Algorithm: cartesian tree

    http://baike.baidu.com/link?url=XUt5fXQ-jtFBM0UdKiGA41_NWFvdFSYwVsy4SVvCRRuEBvNkLfT9TgOtzsXvaOT9nuq_ ...

  2. [sgu P155] Cartesian Tree

    155. Cartesian Tree time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard i ...

  3. 笛卡尔树Cartesian Tree

    前言 最近做题目,已经不止一次用到笛卡尔树了.这种数据结构极为优秀,但是构造的细节很容易出错.因此写一篇文章做一个总结. 笛卡尔树 Cartesian Tree 引入问题 有N条的长条状的矩形,宽度都 ...

  4. PAT-2019年冬季考试-甲级 7-4 Cartesian Tree (30分)(最小堆的中序遍历求层序遍历,递归建树bfs层序)

    7-4 Cartesian Tree (30分)   A Cartesian tree is a binary tree constructed from a sequence of distinct ...

  5. Day6 - J - Cartesian Tree POJ - 2201

    Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binar ...

  6. PAT-1167(Cartesian Tree)根据中序遍历序列重建最小堆

    Cartesian Tree PAT-1167 一开始我使用数组进行存储,但是这样可能会导致无法开足够大的数组,因为树如果是链表状的则无法开这么大的数组(虽然结点很少). 正确的解法还是需要建树,使用 ...

  7. POJ 2201 Cartesian Tree ——笛卡尔树

    [题目分析] 构造一颗笛卡尔树,然后输出这棵树即可. 首先进行排序,然后用一个栈维护最右的树的节点信息,插入的时候按照第二关键字去找,找到之后插入,下面的树成为它的左子树即可. 然后插入分三种情况讨论 ...

  8. SGU 155.Cartesian Tree

    时间限制:0.25s 空间限制:6M 题意: 给出n(n< 50000)个含双关键字(key,val)的节点,构造一颗树使该树,按key值是一颗二分查找树,按val值是一个小根堆. Soluti ...

  9. CF1290E Cartesian Tree

    考虑笛卡尔树的意义: 一个点在笛卡尔树中的子树,代表以他为最小/最大值的区间. 所以一个点的子树大小,一定是类似到达序列边界或者被一个比他更大的数隔离. 考虑记录 \(l_i,r_i\) 为第 \(i ...

随机推荐

  1. uname command

    The command uname helps us in development special in scripts, see help of the uname uname --help Usa ...

  2. 【转载】Win10打开U盘提示“文件或目录损坏无法读取”怎么办?

    以下文转载至系统之家 网址:http://www.xitongzhijia.net/xtjc/20190314/152334.html (PS:暂未亲测) Win10打开U盘提示“文件或目录损坏无法读 ...

  3. python之路---04 列表 元组

    十七 .列表 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 1.列表存在索引和切片. 和字符串是一样的. 2.增删改查操作 1).增加 1. .append(&quo ...

  4. Dynamic dispatch

    Dynamic dispatch动态调度.动态分发 In computer science, dynamic dispatch is the process of selecting which im ...

  5. JAVA中数组Array与List互转

    List<String> list = new ArrayList<String>();String[] array = new String[10]; 1.数组转成Listl ...

  6. ElasticSearch(七)管理ES

    发现,故障修复以及恢复 在发现节点,主要是使用ES的zen模块来进行发现,发现的目的就是加入集群,zen的发现有两种模式分别是单播和组播,单播是指配置好了要发现的节点IP,组播则是指不配置具体IP,向 ...

  7. [转] Centos7 yum lock,无法上网问题,以及安装python3.5

    centos 7 无法上网问题 转自 http://www.cnblogs.com/katios/p/5660336.html 博主本着学无止境的精神在虚拟机上安装了一个centos7 来敲敲命令行. ...

  8. HDFS管理工具HDFS Explorer

    HDFS Explorer是一个在windows上管理HDFS系统的工具,支持上传.下载.重命.复制.移动和删除等. 一.下载地址 CSDN下载地址:http://download.csdn.net/ ...

  9. mac里安装Mycrypt扩展

    https://jingyan.baidu.com/article/e3c78d644cf1ed3c4c85f5a8.html 先用homebrew安装mycrpt 再下载php5.6版本源码 然后进 ...

  10. mariadb开机自启

    执行命令:systemctl enable mariadb 并由此想到,添加服务自启的命令格式: systemctl enable 服务名 当然关闭服务自启也是可以得: systemctl disab ...