博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-1541-Stars (树状数组)
阅读量:6463 次
发布时间:2019-06-23

本文共 2209 字,大约阅读时间需要 7 分钟。

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
5
1 1
5 1
7 1
3 3
5 5
 

 

Sample Output
1
2
1
1
0
 

 

Source
 

 

Recommend
LL
 
#include 
#include
int c[32005],level[32005],n;int lowbit(int x){ return x&(-x);}int sum(int x){ int sum=0; while(x>0) { sum=sum+c[x]; x=x-lowbit(x); } return sum;}void add(int i,int x){ while(i<32005)//要保证在最大坐标范围内 { c[i]=c[i]+x; i=i+lowbit(i); }}int main(){ int x; int y; while(scanf("%d",&n)!=EOF&&n) { memset(level,0,sizeof(level)); memset(c,0,sizeof(c)); for(int i=1; i<=n; i++) { scanf("%d%d",&x,&y); level[sum(++x)]+=1;//,要在他自身之前,所以在add以前 add(x,1);//当x等于0的时候,会陷入死循环,所以横坐标整体向右移一位,结果不变! } for(int i=0; i

 

转载于:https://www.cnblogs.com/tianmin123/p/4753985.html

你可能感兴趣的文章
Oracle电话面试
查看>>
矩形面积
查看>>
Python 常用 PEP8 编码规范和建议
查看>>
Elasticsearch的JavaAPI
查看>>
线程基本概念
查看>>
线性差值法结构类(面向对象的方式)
查看>>
redis之 3.0集群安装
查看>>
MySQL 数据类型
查看>>
INEQUALITY BOOKS
查看>>
Java 将Map按Value值降序排列
查看>>
CCF201312-3 最大的矩形(100分)
查看>>
I00006 打印等腰三角形字符图案(底边在下)
查看>>
@MappedSuperclass的作用
查看>>
合格的产品原型应该是怎样的?
查看>>
grep用法
查看>>
Storage,Memcache,KVDB都是存储服务,如何区分何时用何种服务
查看>>
03.由一个程序开始(三)
查看>>
比起30岁一事无成更可怕的是:你还在虚度光阴。
查看>>
使用C++与SFML编写一个简单的撞球游戏Part7——弹球的碰撞检测
查看>>
如何写PHP规范注释
查看>>