Stars

摘要:
天文学家通常会观察到一颗恒星由一颗行星上的点呈现,而每颗恒星都有Cartesian坐标
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.
Stars第1张

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.
 
星星有坐标,设一颗星星的左边为(a,b),那么他的level就是满足x<a&&y<b的星星个数,用树状数组,树状数组从下标1开始,所以输入x坐标应该加1。
 
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int n,x,y;
int tree[32001],level[32001];
int lowbit(int t)
{
    return t&-t;
}
void update(int x,int y)
{
    for(int i = x;i <= 32001;i += lowbit(i))
    {
        tree[i] += y;
    }
}
int gettree(int x)
{
    int ans = 0;
    for(int i = x;i > 0;i -= lowbit(i))
    {
        ans += tree[i];
    }
    return ans;
}
int main()
{
    scanf("%d",&n);
    for(int i = 0;i < n;i ++)
    {
        scanf("%d%d",&x,&y);
        x ++;
        level[gettree(x)] ++;
        update(x,1);
    }
    for(int i = 0;i < n;i ++)
    {
        printf("%d
",level[i]);
    }
}

免责声明:文章转载自《Stars》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NVidia-Docker2安装与常用命令PADS中查看焊盘/焊点数量下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CAD转DXF怎么转换?教你三种转换方法

2.进入到CAD版本转换的界面中后,在选择“点击选择文件”,在跳转出的“打开”界面中打开需要转换的CAD图纸。...

Nginx设置KeepAlive为close

以腾讯首页为例,就有很多是请求是在客户端发生请求后,服务器响应完就立即关闭了。nginx不像apache,直接有指令keep-aliveoff/on;它使用的是keepalive_timeout[time],默认的时长为75,可以在http、server、location使用此指令。...

CentOS 7 优化TCP链接

在优化服务器配置时,Summary发现服务器端的WAIT连接上有大量的TIME,需要进行优化。Tomcat案例查询与Tomcat对应的端口的tcp链接,发现存在大量TIME_WAIT链接,以及一些其他状态连接,总计400+。...

目录扫描工具DirBuster

DirBuster用于检测web服务器上的目录和隐藏文件。因此,必须在运行之前安装Java环境。在TargetURL下输入要检测的网站的地址。请注意,地址应与协议一起添加。一种是自动选择。它将决定是使用head方法还是get方法。number of Thread是所选扫描线程的数量,selectscanning type是所选的扫描类型。Listbasedb...

iview表格动态数据实现合并功能

需求原型:代码实现:html part:从'../../libs/c导入{MsgType,PublicType}...

Matlab自定义函数的五种方法 [转]

子函数lfg2只能被主函数和主函数中的其他子函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。...