Stars
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1287 Accepted Submission(s): 503
Problem Description
Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the right of the given star. Astronomers want to know the distribution of the levels of the stars.
For example, look at the map shown on the figure above. Level of the star number 5 is equal to 3 (it's formed by three stars with a numbers 1, 2 and 4). And the levels of the stars numbered by 2 and 4 are 1. At this map there are only one star of the level 0, two stars of the level 1, one star of the level 2, and one star of the level 3.
You are to write a program that will count the amounts of the stars of each level on a given map.
Input
The first line of the input file contains a number of stars N (1<=N<=15000). The following N lines describe coordinates of stars (two integers X and Y per line separated by a space, 0<=X,Y<=32000). There can be only one star at one point of the plane. Stars are listed in ascending order of Y coordinate. Stars with equal Y coordinates are listed in ascending order of X coordinate.
Output
The output should contain N lines, one number per line. The first line contains amount of stars of the level 0, the second does amount of stars of the level 1 and so on, the last line contains amount of stars of the level N-1.
Sample Input
Sample Output
题目大意:y递增,y不变x递增的顺序给出点你,这些点的左下方的点数代表这个点的级数,问0~N-1的级数有多少个?此题典型的数组数组,边加入点边更新点,用树状数组有很神奇的效果。
代码:
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <cmath>
using namespace std;
int n, a[32005], val[32005];
void update(int p, int k)
{
while(p <= 32005)
{
a[p] += k;
p += p&(-p);
}
}
int sum(int x)
{
int total = 0;
while(x > 0)
{
total += a[x];
x -= x&(-x);
}
return total;
}
int main()
{
int i, x, y;
while(scanf("%d", &n) != EOF)
{
memset(a, 0, sizeof(a));
memset(val, 0, sizeof(val));
for(i = 0; i < n; i++)
{
scanf("%d %d", &x, &y);
x++; //注意!x++的原因:如果x=0更新时就会出现死循环所以都++
val[sum(x)]++;
update(x, 1);
}
for(i = 0; i < n; i++)
{
printf("%d\n", val[i]);
}
}
return 0;
}
分享到:
相关推荐
#### 知识点一:树状数组的基本概念与特点 **树状数组**(Binary Indexed Tree, BIT),又称**费尼克树**(Fenwick Tree),是一种特殊的数据结构,它能高效地完成对数组元素的累加查询和更新操作。相较于其他数据...
3. **数据结构**:数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图(邻接矩阵、邻接表、最小生成树、拓扑排序等)。 4. **字符串处理**:KMP算法、Manacher's Algorithm、Rabin-Karp算法等。 5. **...
### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...
8. **图论与树**:HDU题目中可能涉及图的遍历(深度优先搜索DFS、广度优先搜索BFS)、树的遍历(前序、中序、后序)以及最小生成树、最短路径等算法。 9. **动态规划**:这是一种优化策略,通过构建状态转移方程来...
在编程实践中,字符串操作是一项基础技能,它涉及到对字符数组或字符串对象的处理。在本题中,编写者首先利用`sscanf`函数从输入中读取字符串,并使用空格作为单词的分隔符,然后将读取到的单词存储在一个字符数组中...
"HDU最全ac代码"这个压缩包很可能是包含了在HDU平台上解题通过的完整源代码集合,旨在帮助学习者理解和掌握各种算法,提升编程解决问题的能力。 首先,我们来了解一下ACM/ICPC比赛。这是一项全球性的编程竞赛,参赛...
【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
- 熟悉C语言的基础语法,如字符串处理、数组操作等。 通过解决这类问题,初学者可以提高对算法的理解,锻炼逻辑思维能力,同时熟悉ACM比赛的输入输出格式。对于进一步的ACM训练,还需要学习其他数据结构和算法,...
例如,题目编号为1000至1028之间的基础题,可能涉及简单的数学运算、数组操作以及基本的数据类型转换等,是编程学习的基础。 ### DP(动态规划) 动态规划是一种解决多阶段决策过程中的最优化问题的方法。它通过将...
2. **数据结构**:常用的数据结构包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等,对于不同的问题,选择合适的数据结构能有效提高解题效率。 3. **字符串处理**:杭电ACM中的题目可能涉及到...
线段树是一种树形结构,它将一个数组分割成多个小 区间,每个区间对应树上的一个节点。线段树的每个节点都包含了该节点对应的区间信息。 线段树的主要应用 线段树的主要应用是解决区间问题,例如区间和、区间...
数据结构是ACM竞赛中的核心部分,包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图(图的遍历、最短路径等)等。熟练掌握这些数据结构的实现与操作,能帮助解决复杂问题。例如,二分查找可以快速...
ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...
HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...
根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...
HDU1059的代码
hdu1001解题报告
HDU ACM教案是针对ACM/ICPC(国际大学生程序设计竞赛)的训练教程,旨在提升参赛者在算法和编程方面的能力。动态规划是计算机科学中一种强大的问题解决方法,尤其在处理最优化问题时非常有效。在这个教案中,我们将...