POJ 2352 Stars

原创 2016年08月28日 14:35:06

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
5
1 1
5 1
7 1
3 3
5 5
Sample Output
1
2
1
1
0
Hint
This problem has huge input data,use scanf() instead of cin to read data to avoid time limit exceed.


题目大意:
在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0<=x 且y0<=y。如果左下位置有a个星星,就表示这个星星属于level x
按照y递增,如果y相同则x递增的顺序给出n个星星,求出所有level水平的数量。

分析与总结:
因为输入是按照按照y递增,如果y相同则x递增的顺序给出的, 所以,对于第i颗星星,它的level就是之前出现过的星星中,横坐标x小于等于i星横坐标的那些星星的总数量(前面的y一定比后面的y小)。
所以,需要找到一种数据结构来记录所有星星的x值,方便的求出所有值为0~x的星星总数量。
与树状数组求逆序对的思路差不多。


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,c[32005],level[15005];
int lowbit(int x)
{
    return x&(-x);
}
int sum(int pos)
{
    int ans=0;
    while(pos)
    {
        ans+=c[pos];
        pos-=lowbit(pos);
    }
    return ans;
}
void add(int pos)
{
    while(pos<=32001)//因为之前x++,所以是32001
    {
        c[pos]++;
        pos+=lowbit(pos);
    }
}
int main()
{
    scanf("%d",&n);
    int x,y;
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&y);
        level[sum(++x)]++;//防止0的出现,刚学树状数组,没有注意到这一点,会导致TLE 
        add(x);
    }
    for(int i=0;i<=n-1;i++)
        printf("%d\n",level[i]);
    return 0;
}
版权声明:本文章的作者才疏学浅,有错误或疏漏是在所难免的,希望读者能帮助发现错误并提出建议。

POJ-2352-Stars

POJ-2352-Stars http://poj.org/problem?id=2352 给出n个星星的坐标,如果一个星星的左下方(包含正左和正下)有k颗星星,就说这颗星星是k级的,统计每个等级...
  • Cambridgeacm
  • Cambridgeacm
  • 2012年07月22日 15:15
  • 1428

Poj(2352)——Stars(树状数组)

Description Astronomers often examine star maps where stars are represented by points on a plane ...
  • ACMer_hades
  • ACMer_hades
  • 2015年05月30日 15:31
  • 838

poj 2352 Stars(树状数组 or 线段树)

链接: http://poj.org/problem?id=2352 题目大意: 在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0 按照y...
  • shuangde800
  • shuangde800
  • 2012年11月12日 17:21
  • 5694

POJ-2352 Stars【树状数组】

题目链接:http://poj.org/problem?id=2352 题目大意: 给你星星的坐标(y递增,若y相等,x递增),每个星星都有一个等级,规定它的等级就是在它左下方的星星的个数。输入所...
  • niushuai666
  • niushuai666
  • 2012年03月24日 07:54
  • 2803

POJ2352:Stars(树状数组)

Description Astronomers often examine star maps where stars are represented by points on a plane ...
  • libin56842
  • libin56842
  • 2015年06月21日 16:44
  • 1535

[ACM] hdu 2352 Stars (树状数组)

Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30272   Accepte...
  • sr19930829
  • sr19930829
  • 2014年04月19日 20:53
  • 1429

POJ 2352 Stars 树状数组

StarsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 13167 Accepted: 5654DescriptionAstron...
  • hqd_acm
  • hqd_acm
  • 2010年07月08日 10:12
  • 362

POJ 2352 Stars【树状数组】

#include #include #include #include #include #include #include #define FOR(i,n) for(int i=0;i
  • u012469987
  • u012469987
  • 2014年08月11日 01:37
  • 316

POJ - 2352 Stars

注意输入有0出现,BIT不好处理,所以在输入的时候加1 // 树状数组 // http://blog.csdn.net/niushuai666/article/details/7389273 #i...
  • flx413
  • flx413
  • 2017年05月17日 21:43
  • 203

poj 2352 stars 树状数组

题目大意: 给你n个坐标,统计每一个坐标左下角坐标的个数; 解题思路: 因为已经对坐标排序好了,所以直接按顺序插入,然后统计个数即可; 注意上限要开的大点,不然会爆错; 为了防止0的问题,应...
  • buctyyzyn
  • buctyyzyn
  • 2015年03月27日 18:25
  • 260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2352 Stars
举报原因:
原因补充:

(最多只允许输入30个字)