OpenJudge Cartesian Tree
【代码】
#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的更多相关文章
- Algorithm: cartesian tree
http://baike.baidu.com/link?url=XUt5fXQ-jtFBM0UdKiGA41_NWFvdFSYwVsy4SVvCRRuEBvNkLfT9TgOtzsXvaOT9nuq_ ...
- [sgu P155] Cartesian Tree
155. Cartesian Tree time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard i ...
- 笛卡尔树Cartesian Tree
前言 最近做题目,已经不止一次用到笛卡尔树了.这种数据结构极为优秀,但是构造的细节很容易出错.因此写一篇文章做一个总结. 笛卡尔树 Cartesian Tree 引入问题 有N条的长条状的矩形,宽度都 ...
- 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 ...
- 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 ...
- PAT-1167(Cartesian Tree)根据中序遍历序列重建最小堆
Cartesian Tree PAT-1167 一开始我使用数组进行存储,但是这样可能会导致无法开足够大的数组,因为树如果是链表状的则无法开这么大的数组(虽然结点很少). 正确的解法还是需要建树,使用 ...
- POJ 2201 Cartesian Tree ——笛卡尔树
[题目分析] 构造一颗笛卡尔树,然后输出这棵树即可. 首先进行排序,然后用一个栈维护最右的树的节点信息,插入的时候按照第二关键字去找,找到之后插入,下面的树成为它的左子树即可. 然后插入分三种情况讨论 ...
- SGU 155.Cartesian Tree
时间限制:0.25s 空间限制:6M 题意: 给出n(n< 50000)个含双关键字(key,val)的节点,构造一颗树使该树,按key值是一颗二分查找树,按val值是一个小根堆. Soluti ...
- CF1290E Cartesian Tree
考虑笛卡尔树的意义: 一个点在笛卡尔树中的子树,代表以他为最小/最大值的区间. 所以一个点的子树大小,一定是类似到达序列边界或者被一个比他更大的数隔离. 考虑记录 \(l_i,r_i\) 为第 \(i ...
随机推荐
- 使用btrace需要注意的几个问题
1. @ProbeClassName String clazz 此处String不能写为java.lang.String 2. location=@Location(Kind.RETURN) publ ...
- Django 之老师讲的教师,班级学生,class_2_teacher四个表格的项目
现数据库中有四张表格 要求:实现查询功能 页面显示教师 id 姓名 教学班级 url 处设置 url(r'teacher_list/',teacher_list), teacher_list函 ...
- chaostoolkit 混沌工程工具集
chaostoolkit 目标是提供一个免费,开放,社区驱动的工具集以及api 以下为一张参考图 一些已经的扩展 基础设施/平台 Fault Injections: [chaostoolkit-kub ...
- Laya学习
IDE安装 https://www.jianshu.com/p/88fa76a5becc npm uninstall -g typescript npm install -g typescript@2 ...
- 自建mail服务器之一:dns解析
这个其实不是必须的 1,maradns服务器安装和设置 mararc文件 # Win32-specific MaraRC file; this makes a basic recursive DNS ...
- css 新单位 fr
fr是css刚出的一个新的单位,目前经过测试在chrome和firefox是可以支持的 举个案列,拿一个网格布局来说吧 <!DOCTYPE html> <html lang=&quo ...
- centos7下yum安装mariadb
1.安装MariaDB 删除已安装的mysqlyum remove mysql mysql-server mysql-libs mysql-devel删除存放数据的目录rm -rf /var/lib/ ...
- sbt第一次运行下载jar包很慢解决办法
一.补充sbt配置文件,添加下载路径 文件结构如下:修改了sbtconfig.txt,repo.properties. sbtconfig.txt配置内容为: # Set the java args ...
- HIMSS EMRAM新版标准将于2018年1月1日生效
https://www.cn-healthcare.com/article/20170223/content-489862.html HIMSS EMRAM新版标准将于2018年1月1日生效 2017 ...
- sqlalchemy操作----建表 插入 查询 删除
... #!_*_coding:utf-8_*_ #__author__:"Alex huang" import sqlalchemy from sqlalchemy import ...