先上题:

【问题描述】

众所周知,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. [改善Java代码]覆写变长方法也循规蹈矩

    建议6:覆写变长方法也循规蹈矩 在Java中,子类覆写父类中的方法很常见,这样做既可以修正Bug也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle),我们来看 ...

  2. 【STL】全排列生成算法:next_permutation

    C++/STL中定义的next_permutation和prev_permutation函数是非常灵活且高效的一种方法,它被广泛的应用于为指定序列生成不同的排列. next_permutation函数 ...

  3. 回溯(UVA129)

    POINT: 如何判断是否包含连续重复子串? 判断 当前串 的 后缀 啦~~~ You have been employed by the organisers of a Super Krypton ...

  4. 核心概念 —— 服务容器

    1.简介 Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具.依赖注入听上去很花哨,其实质是通过构造函数或者某些情况下通过 set 方法将类依赖注入到类中. 让我们看一个简单的例子: ...

  5. [原创]centos6.5 dhcpd 服务一直failed状态

    因为要部署kickstart自动化系统分发,所以需要在上面配置dhcp服务器,之前也使用同样的机器进行配置,没是没有问题的,但是这次在配置了dhcpd.conf文件后,重启服务的时候却一直提示 [ro ...

  6. Linux C编程--打开和关闭流

    以下函数用于打开和关闭一个流.#include <stdio.h>FILE * fopen (const char *pathname, const char *opentype);int ...

  7. 如何查看JDK是64bit还是32bit

    在eclipse或MyEclipse中创建一个Java Project并运行如下代码: public class Test { public static void main(String[] arg ...

  8. WebService中控制字符的处理

    情景     最近项目中很多WebService都发不出去,报的错误如下:    Invalid white space character in text to output (in xml 1.1 ...

  9. Objective-c中的对象间的消息传递以及消息路由

    刚开始使用Objective-C时,总是习惯将对象间发送消息之间称呼为方法调用.心想,这和c#不是一回事吗?不就是调用实例方法吗,还搞个消息发送作甚,最后还不是要转化为方法的调用?通过一段时间的理解学 ...

  10. Html的maxlength属性

    maxlength表示文本框只能输入的字符串,多的无法输入