先上题:

【问题描述】

众所周知,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. Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片

    Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...

  2. LeetCode 42

    Trapping Rain Water Given n non-negative integers representing an elevation map where the width of e ...

  3. Ajax中解析Json的两种方法详解

    eval();  //此方法不推荐 JSON.parse();  //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name&qu ...

  4. 小议jQuery中的事件

    学了jQuery这么长时间,到这里真的有一种柳暗花明又一村的感觉,在这里先表达一下自己学这一章节的happy心情吧(在严厉的金工实习老师眼皮底下偷偷学习,当然还有各种nerves~). 1加载DOM ...

  5. Nginx - HTTP Configuration, Module Directives

    Socket and Host Configuration This set of directives will allow you to configure your virtual hosts. ...

  6. Asp.net 后台调用js方法(转)

    1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("XXX ...

  7. Android adb常见问题整理(转)

    原文地址:http://blog.csdn.net/androiddevelop/article/details/8130416 以下都是ADB连接问题,可以通过尝试如下步骤,由简单度排序 1. 插拔 ...

  8. virtualbox下Centos6.5桥接模式上网配置方法

    记得之前安装linux配置桥接模式,马上就能上网的,虚拟机上重装了系统后就不能上网了,折腾了好几次,不停地安装系统,原来应该怎么配置,我真是完全忘记了,年纪大了脑子不好使了!这里记录一下,免得下次再忘 ...

  9. iOS开发——消息推送跳转

    项目开发用集成是极光推送JPush     这里主要是消息推送过来处理对应界面跳转          同时看到两篇写的不错的相关博客分享一下:      http://www.jianshu.com/ ...

  10. Js 变量的作用域

    变量的作用域 所有的变量作用域是指在哪里可用哪里不可用 局部作用域和全局作用域 在js中以函数来分割作用域 在函数里面就叫做局部作用域,在函数外面的就叫全局作用域 在函数里面如果省略var 关键字 那 ...