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

树形数组。

题目:摘星星

描述:宇航员经常检测星图,在星图上,星星由点表示而且每颗星星都有笛卡尔坐标。星星的等级表示左下方星星的数量。宇航员想知道星星等级的分布。

例如,如上面图形所示,第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掉了…… …… ……回头再出正版题解……

时间: 2024-10-15 04:12:32

树形数组——摘星星伪题解的相关文章

ACM 树形数组

树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值. 树状数组的解法和程序网上有很多,这里我想思考一下这种算法的灵魂,也就是基于什么样的契机和灵感产生了这种绝妙的想法.这是我感兴趣的方向. 这种算法,主要用于查询数组中任意两个数之间的所有元素之和,而且这个

【SGU 180】Inversions —— 归并排序或树形数组计算逆序对

原题链接 180. Inversions time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard output: standard There are N integers (1<=N<=65537) A1, A2,.. AN (0<=Ai<=10^9). You need to find amount of such pairs (i, j) that 1<=i<j&l

编程猫开发《摘星星小怪物》游戏

[阅读提示]编程猫中的源码编辑器是一款类似于Scratch的软件,而且在实现功能上做了大幅度的改进与提升.因此,熟悉Scratch编程的朋友可以很容易阅读本文:但是,其中的部分积木代码与Scratch并不相同.Scratch积木提供了少儿编程最基础的功能积木:编程猫源码编辑器则扩展了Scratch功能,并进行了大量简化. 根据本人使用百度指数的粗略分析,编程猫是截止目前国内最大规模且技术研发含量最高的少儿编程(含机器人编程)公司,值得关注. 一.游戏情景与快照 游戏未开始时界面如图所示: 游戏情

[CTSC2017]最长上升自序列(伪题解)(树状数组+DP套DP+最小费用最大流+Johnson最短路+Yang_Tableau)

部分分做法很多,但每想出来一个也就多5-10分.正解还不会,下面是各种部分分做法: Subtask 1:k=1 LCS长度最长为1,也就是说不存在j>i和a[j]>a[i]同时成立.显然就是一个LDS,树状数组直接求即可. Subtask 2:k=2 最多两个,也就是可以由两个LCS拼起来,f[i][j]表示第一个LCS以i结尾,第二个以j结尾的方案数,转移显然. Subtask 3:k=2 树状数组优化DP,复杂度由$O(n^3)$降为$O(n^2 \log n)$ Subtask 4,5:

2016程设期末伪题解

期末发挥实在是太差了-_-# 比2015年少了好多送分题,整体难度显得很大,但是考完之后静下来做又觉得并不是很难orz 1. 篮球联赛:暴力枚举(我用的dfs来枚举) 2. 夺宝探险:暴力dfs 3. 寻找边缘:从边缘暴力dfs 4. 猴子摘桃:可以直接用两个指针指向区间端点做到O(n) 5. 分形盒:直接递归 6. 42点:暴力dfs遍历所有结果 以上几题就不放代码了 7. 上机:dp 题意:有 n 个座位排成一排(1<=n<=10000),给定坐到每个座位上两边有0个.1个和2个人时可获得

树状数组POJ2352星星

http://poj.org/problem?id=2352 这道题的题意对于住学者应该比较难理解,但是如果弄明白他的意思的话,你就会发现这就是赤裸裸的树状数组,哎,欺负我不懂是吧,当时读题读啦好久,好啦,下面说一下他的意思吧.. 由于题目已经说明y的坐标是递增顺序,所以直接考虑x的坐标就可以啦.每次当有x输入时,都求出sum(x+1)的值(注意呦,在树状数组中,可是从1开始的,而题目中的输入是包含0的),并把result[sum(x+1)]++:再更新一下,就好啦啦啦啦. 还是要注意一点,用c

树形数组 学习之外总能发现别人更好的

 <html> <HEAD></HEAD> <BODY> <textarea rows="50" cols="50">  /***************** http://www.anycodes.cn/zh/  [[树状数组]线段数]  高效:log(n)  操作:位操作  思想:二分法  百度百科之外还有以下博客 http://dongxicheng.org/structure/binary_inde

剑指offer 面试题8:旋转数组的最小数字 题解

面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个已从小到大排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.(要求不能直接遍历数组来求解.) 提交网址: http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=11159 或 http:

51 Nod 1107 斜率小于0的连线数量 (转换为归并求逆序数或者直接树状数组,超级详细题解!!!)

1107 斜率小于0的连线数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线的数量. 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y).例如:(2,3) (3,4) (1,5) (4,6),其中(1,5)同(2,3)(3,4)的连线斜率 < 0,因此斜率小于0的连线数量为2. Input 第1行:1个数N,N为点的数量(0 <= N <= 50000) 第2