Stars(BIT树状数组)
2015-12-09 11:01
344 查看
Stars
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6993 Accepted Submission(s):
2754
[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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.
[align=left]Output[/align]
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.
[align=left]Sample Input[/align]
5
1 1
5 1
7 1
3 3
5 5
[align=left]Sample Output[/align]
1
2
1
1
0
给你一堆星星的坐标,一个星星的level等于它左下边的星星个数,不包括自己本身,可同x,同y;
而且题目给的星星的顺序是按照y,x坐标来排序的,BIT搞。
/******************************* Date : 2015-12-09 23:16:34 Author : WQJ (1225234825@qq.com) Link : http://www.cnblogs.com/a1225234/ Name : ********************************/ #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <set> #include <vector> #include <queue> #include <stack> using namespace std; int bit[32000+5]; int num[32000+5]; int k=32000+5; int lowbit(int i) { return i&-i; } void add(int i,int a) { while(i<=32005) { bit[i]+=a; i=i+lowbit(i); } } int sum(int i) { int s=0; while(i>0) { s+=bit[i]; i=i-lowbit(i); } return s; } int main() { freopen("in.txt","r",stdin); int i,j; int n,x,y; while(scanf("%d",&n)!=EOF) { memset(num,0,sizeof(num)); memset(bit,0,sizeof(bit)); for(i=0;i<n;i++) { scanf("%d%d",&x,&y); num[sum(x+1)]++; add(x+1,1); } for(i=0;i<n;i++) printf("%d\n",num[i]); } return 0; }
据说暴力也能过:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[33000],i,j,k,l,m,n,x[33000],y[33000]; int main() { while(scanf("%d",&k)!=EOF) { memset(a,0,sizeof(a)); for(j=0;j<k;j++) { scanf("%d%d",&x[j],&y[j]); int cnt=0; for(l=0;l<j;l++) if(x[l]<=x[j]) cnt++; a[cnt]++; } for(i=0;i<k;i++) printf("%d\n",a[i]); } return 0; }
相关文章推荐
- 22个值得收藏的Android开源代码-UI篇
- 渲染多边形和填充多边形
- STM32F4时钟设置分析
- android sdcard访问权限问题
- 复杂数据类型
- 常用正则表达式
- code first
- jQuery中的.height()、.innerHeight()和.outerHeight()的区别
- VNX5700_DR An error occurred during the login process. The storage processors did not log in proper
- checkbox的全选和取消全选按钮的js
- 变量内存原理
- JS-面向对象探讨
- Android Studio启动后一直 Checking for updated SDK components
- HDU 5592 ZYB's Premutation(树状数组 + 二分)
- 嵌入式系统的分层与专业的分类
- 初入android驱动开发之网络设备以太网(二)
- 华为ensp的安装和使用
- dispatchkeyevent的调用机制
- (五证合一)法人和其他组织统一社会信用代码编码规则
- GLUT环境部署