先上题:

【问题描述】

众所周知,JY的百度搜索算法已经练的炉火纯青,任何搜索题都能0.000ms出解。

不幸的是,JY遇到了一道百度搜索算法解决不了的题目,题目是这样的:

给定N个数A[1] A[2] .. A[N],你需要将其重新排序,满足:

1. 对于1<i<=N,A[i]>=A[i/2]。(i/2取下整)

2. 在所有满足条件1的答案中,取A[1]最大的。

3. 仍有多解则取A[2]最大的,依次类推。

JY只好去问他的LBH,可是LBH正在准备数学联赛,没空理JY。JY表示懒得做这道水题,于是这道题就交给你了。

【输入格式】

第一行 N

接下来一行N个数

【输出格式】

一行N个数,相邻的数用空格隔开

【输入输出样例】

lazy.in

lazy.out

7

1 2 3 4 5 6 7

1 5 2 7 6 4 3

【数据范围】

50%:N<=2000

100%:N<=100000

一看到这题,便可想到树,对于a[i],我们可以先排序,用线性表来实现树,即当我们把最小值放在中间,把他的左子树放较小的剩下的数,

把他的右子树放较大的数,再重复建树过程即可,代码如下:

var
i,k,n:longint;
a,b:array[-..]of longint; procedure qsort(l,r:longint); //快排
var
i,j,mid,t:longint;
begin
i:=l; j:=r; mid:=a[(l+r)div ];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end; procedure put(x:longint); //用后序遍历(?)建立一个树
begin
inc(k);
if k>n then exit;
b[x]:=a[k];
if (*x+)<=n then
put(*x+);
if *x<=n then
put(*x);
end; begin
assign(input,'lazy.in');
assign(output,'lazy.out');
reset(input);
rewrite(output);
readln(n); //读入n
for i:= to n do
read(a[i]);
qsort(,n);
k:=;
put(); //从1开始建树
for i:= to n do
write(b[i],' '); //正序输出
close(input);
close(output);
end.

懒惰的JY--关于遍历的更多相关文章

  1. javaSE第十八天

    第十八天    192 1:Map(掌握)    192 (1)定义:    192 (2)Map和Collection的区别?    192 (3)Map接口功能概述(自己补齐)    192 A: ...

  2. Java基础知识强化之集合框架笔记62:Map集合之HashMap嵌套HashMap

    1. HashMap嵌套HashMap  传智播客          jc    基础班                      陈玉楼  20                      高跃   ...

  3. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  4. 集合框架-Map集合

    * Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...

  5. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  6. 二叉查找树的懒惰删除(lazy deletion)

    第四章习题:二叉查找树类实现懒惰删除,注意findMin()和findMax()(递归) 算是发布的第一篇学习笔记.也不敢保证写的代码一定正确,错了的地方请大家指正,谢谢. 直接开始吧.先谈谈数据结构 ...

  7. OpenJudge计算概论-二维数组右上左下遍历

    /*====================================================================== 二维数组右上左下遍历 总时间限制: 1000ms 内存 ...

  8. poj3468 线段树的懒惰标记

    题目链接:poj3468 题意:给定一段数组,有两种操作,一种是给某段区间加c,另一种是查询一段区间的和 思路:暴力的方法是每次都给这段区间的点加c,查询也遍历一遍区间,复杂度是n*n,肯定过不去,另 ...

  9. 查询数据库中的表格---通过构造方法将数据存入到List集合中---遍历进行输出

    package cn.jy.demo; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.Res ...

随机推荐

  1. CF Pangram

    Pangram time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  2. [改善Java代码] 提倡异常的封装

    JavaAPI提供的异常都是比较低级别的,低级别是指只有开发人员才能看懂的异常.而对于终端用户来说基本上就是天书,与业务无关,是纯计算机语言的描述. 异常封装的三方面的好处: 1)提高系统的友好性   ...

  3. (转)工作之路---记录LZ如何在两年半的时间内升为PM

    原文地址:http://www.cnblogs.com/zuoxiaolong/p/life31.html 引言 之前的伪PM纠结之路已经渐渐结束,LZ也终于正式爬上了PM的位置,对于LZ来说,这个时 ...

  4. Jersey(1.19.1) - Building URIs

    A very important aspects of REST is hyperlinks, URIs, in representations that clients can use to tra ...

  5. Yii zii.widgets.grid 隐藏列 方便js获取隐藏值

    array( 'name' => $data->is_audit, 'value' => '$data->is_audit', 'headerHtmlOptions' => ...

  6. MSSQL 数字钱转化为大写

    --说明: --1.本函数范围从 毫 ~ 兆 --2.有四种精度(元,角 ,分,厘 ,毫) --3.有三种进位规则(四舍五入,接舍去,非0就入) --参数说明:dbo.MoneyToCapital( ...

  7. C# GET 和 SET作用

    C#中get和SET,看来看去还是看不懂,通俗一点解释一下,用了有什么好处,不用会怎么样 如果你这样写是没有什么不一样的. private int __Old; public int Old{ get ...

  8. 写在十年 2007-09-15 (写给L之三)

    你知道吗? 那种时间很远,但心很近的感觉.   时间已经远去了十年, 但亲切的感觉依然清晰可见,   无论时光远去了十年,二十年,三十年, 永远…… 它已经植根,在心间……

  9. ArcSDE for oracle10g安装后post的时候出现错误

    The Post Installation Setup can not locate required Oracle files in your path.Check your Oracle inst ...

  10. poj 2220 Sumsets

                                                                                                     Sum ...