码迷,mamicode.com
首页 > 编程语言 > 详细

树形数组——摘星星伪题解

时间:2015-11-21 22:31:38      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

  树形数组。

  题目:摘星星

  描述:宇航员经常检测星图,在星图上,星星由点表示而且每颗星星都有笛卡尔坐标。星星的等级表示左下方星星的数量。宇航员想知道星星等级的分布。
技术分享
例如,如上面图形所示,第5号星等级是3 (它由三个标记为1,2和4的星组成)。标记着2和4的星星的等级是1,在此地图上,0等级的星星只有一个,1等级的有两个,2等级的有一个,3等级的有一个。
你设计一个程序,在给定地图上计算出每个等级星星的数量。
输入:
输入文件“INPUT.TXT”的第一行包含N个星星(1<=N<=60000), 接下来的N行描绘星星的坐标(每行中有两个整数X和Y,由空格分开, 0<=X,Y<=32000)。 在图上的一点只能存在一颗星星,星星根据Y坐标的递增顺序排列,Y坐标相同的星星根据X坐标的递增顺序排列。
输出:
输出文件“OUTPUT.TXT”应包含N 行,一行一个数字,第一行包含0等级星星的数量,第二行包含1等级星星的数量,等等,最后一行包含N-1等级星星的数量。
输入输出示例:
INPUT.TXT           OUTPUT.TXT
5                    1
1 1                  2
5 1                  1
7 1                  1
3 3                  0
5 5

 

 

部分解析:此题用树形数组解决,按照x大小排序,然后进行处理。

实际实现:开两个数组,先按照x大小排序,再按照y大小排序。然后再按照x大小依次处理,向前寻找第一个y坐标比当前点小的点(称为目标点),记录下来横坐标和位置,然后向前(后)寻找相同横坐标的点,更新最大的等级数。其中,数组的预处理略过。然后再向前(后)寻与找当前点横坐标相同的点,当纵坐标小于等于当前点的时候,inc(当前点等级数)。最后进行补充,判断是否之前有一些点,在目标点的纵坐标之上,即有可能忽略掉的点,以此类推,更新完一个节点后,反复进行此上操作。(跟树形数组好像没太大关系)但是时间复杂度很高,5T,而且不知为什么前五个点W掉了…… …… ……回头再出正版题解……

树形数组——摘星星伪题解

标签:

原文地址:http://www.cnblogs.com/zhtjtcz/p/4984785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!