26935: 笛卡尔树

原创 2015年07月10日 09:46:21

题目描述

【问题描述】
      笛卡尔树(Cartesian Tree)是一种特殊的二叉搜索树。让我们复习一下:二叉搜索树是一颗有根二叉树,并且对于每个结点x都满足:它左子树中的任何结点的权值都小于x的权值,它右子树中任何结点的权值都大于x的权值。让我们形式化定义:假设x的左子树为L(x),x的右子树为R(x),x的权值为k(x)。则一颗满足如下条件的二叉树称为二叉搜索树:
     如果点y在L(x)中,则k(y)<k(x);如果点z在R(x)中,则k(z)>k(x)。
     一颗二叉搜索树称为笛卡尔树,当且仅当我们给每个点都附加一个权值a(x),且每个点的a权值都严格小于它左右子树中的点的a权值。也就是说:如果点y是x的父亲,则a(y)<a(x)。
     因此,一颗笛卡尔树就是一颗二叉树,对于每个结点有两个权值(k,a),且满足上面三条性质。
     给定一个点,请你构造出一颗笛卡尔树。

输入

第一行是一个整数n(1=<n<=50000),表示给定结点的个数。
接下来n行,每行两个整数k(i),a(i),表示点i的两个权值。题目保证同类权值不出现重复,也就是说对于任意i<>j,一定有k(i)<>k(j),且a(i)<>a(j)。权值都是不超过50000的正整数。

输出

第一行输出解的情况。如果可以构造出一颗笛卡尔树,输出"yes",否则输出"no"。
如果可以构造,那么接下来输出n行,每行3个整数,分别表示第i个结点的父亲、左儿子、右儿子的编号。顶点编号都是从1到n的,0表示空。顶点的输出顺序与输入顺序一致。

样例输入

7 5 4 2 2 3 9 0 5 1 3 6 6 4 11

样例输出

yes 2 3 6 0 5 1 1 0 7 5 0 0 2 4 0 1 0 0 3 0 0
program pdikaer; var n:longint; a:array[0..50000+1,1..3]of longint; f:array[0..16]of longint; mi:array[0..50000+1,0..16,1..2]of longint; o:array[0..50000+1,1..3]of longint; procedure init; var i:longint; begin f[0]:=1; for i:=1 to 16 do f[i]:=f[i-1]*2; read(n); for i:=1 to n do begin read(a[i,1],a[i,2]); a[i,3]:=i; end; end; procedure qsort(l,r:longint); var i,j,k:longint; begin if l>=r then exit; i:=l; j:=r; k:=a[(l+r) div 2,1]; while i<j do begin while a[i,1]<k do inc(i); while a[j,1]>k do dec(j); if i<=j then begin a[0]:=a[i]; a[i]:=a[j]; a[j]:=a[0]; inc(i); dec(j); end; end; qsort(l,j); qsort(i,r); end; procedure dfs(l,r:longint); var i,t,ft,lt,rt,x:longint; begin if r<=l then exit; t:=trunc(ln(r-l+1)/ln(2)); if mi[l,t,1]<mi[r-f[t]+1,t,1] then x:=mi[l,t,2] else x:=mi[r-f[t]+1,t,2]; ft:=a[x,3]; lt:=0; if l<>x then begin t:=trunc(ln(x-l)/ln(2)); if mi[l,t,1]<mi[x-f[t],t,1] then lt:=a[mi[l,t,2],3] else lt:=a[mi[x-f[t],t,2],3]; end; rt:=0; if r<>x then begin t:=trunc(ln(r-x)/ln(2)); if mi[x+1,t,1]<mi[r-f[t]+1,t,1] then rt:=a[mi[x+1,t,2],3] else rt:=a[mi[r-f[t]+1,t,2],3]; end; o[ft,2]:=lt; o[ft,3]:=rt; o[lt,1]:=ft; o[rt,1]:=ft; dfs(l,x-1); dfs(x+1,r); end; procedure main; var i,b,t:longint; begin for i:=1 to n do mi[i,0,1]:=a[i,2]; for i:=1 to n do mi[i,0,2]:=i; for t:=1 to trunc(ln(n)/ln(2)) do for b:=1 to n-f[t]+1 do if mi[b,t-1,1]>mi[b+f[t-1],t-1,1] then mi[b,t]:=mi[b+f[t-1],t-1] else mi[b,t]:=mi[b,t-1]; dfs(1,n); end; procedure print; var i:longint; begin writeln('yes'); for i:=1 to n do writeln(o[i,1],' ',o[i,2],' ',o[i,3]); end; begin init; qsort(1,n); main; print; end.

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章姚笛出轨

【谜团一】文章姚笛出轨的料是怎么放出来的? 事件发生后,风行工作室爆料的总负责人卓伟自诉中表示去年六七月份,他们听闻文章和姚笛相恋的消息,于是开始不间断的跟拍。那么到底是谁放的料? 通常娱...
  • u014727056
  • u014727056
  • 2014年04月15日 13:25
  • 135

金笛短信应用软硬件-金笛工业手机

要实现短信功能,目前可以通过短信网关(移动和联通的特服号)和短信猫两种实现方式。各有优缺点。通过短信网关优点是发送速度快,短时间内就能大批量发送短信,用于短信营销方面比较合适,缺点是短信通道不太好申请...
  • jindiduanxin
  • jindiduanxin
  • 2014年07月14日 15:05
  • 83

文章姚笛约会照曝光

号称“周一见”的《南都娱乐周刊》报道截图在微博曝光,图中文章姚笛亲密贴面同游,双手相拥彼此“抱上了”。   据《南都娱乐周刊》报道,3月15日黄昏时分,一对带有几分“神秘色彩”的男女在深圳蛇口的...
  • u014488887
  • u014488887
  • 2014年04月01日 16:13
  • 178

文章姚笛地下情曝光

文章姚笛地下情曝光   文章姚笛《裸婚》生情,继腾讯娱乐上周六(29日)独家曝光二人深圳约会同游香港后,二人亲密搂抱照随后也浮出水面。31日凌晨,已为人夫人父的文章终于开口,发声明承认出轨并致歉...
  • u014459956
  • u014459956
  • 2014年03月31日 10:43
  • 163

罢永细霞置笛品笛厣沮炼耘酚坦葱

http://i2.feixin.10086.cn/pages/107654/1344862972 http://i2.feixin.10086.cn/pages/107654/1344863048...
  • erickdu888
  • erickdu888
  • 2014年11月16日 02:30
  • 5

linux定时器的使用----笛风读书笔记系列

读书笔记系列之:linux定时器的使用                                                                              ...
  • u012090276
  • u012090276
  • 2014年02月25日 19:55
  • 536

Linux下makefile教程----笛风读书笔记系列

读书笔记系列之:Linux下makefile教程                                                                         ...
  • u012090276
  • u012090276
  • 2014年02月27日 15:24
  • 497

pthread_cancel与取消点----笛风读书笔记系列

读书笔记系列之:pthread_cancel与取消点                                                                       ...
  • u012090276
  • u012090276
  • 2014年02月27日 14:27
  • 555

腥缕笛笛侠谒么米呢啄牡慈史鲁赖

http://www.ebay.com/cln/9t9_7753/book/144565617013 http://www.ebay.com/cln/nfd_1531/book/1444432550...
  • sungcong
  • sungcong
  • 2014年12月14日 23:14
  • 4

五月太湖迷笛志愿者体验

五月太湖迷笛志愿者这是我第一次去迷笛,也是第一次当志愿者,一个人坐早上9点坐上火车,背着单反,背着kindle。心里怀着大大的期待感,也有一丝担忧,我接触摇滚的时间不长,能融合进去吗?他们会讨厌我么?...
  • sinat_19297817
  • sinat_19297817
  • 2015年05月16日 19:22
  • 340
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:26935: 笛卡尔树
举报原因:
原因补充:

(最多只允许输入30个字)