hdoj1541Stars【树状数组】

原创 2015年11月21日 17:26:56

Stars

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6775    Accepted Submission(s): 2698


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
 
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=32010;
int c[maxn+10];
int vis[maxn+10];
int N;
int low(int n){
	return n&(-n);
}
void add(int p,int q){
	while(p<=maxn){
		c[p]+=q;
		p+=low(p);
	}
}
int sum(int n){
	int value=0;
	while(n>0){
		value+=c[n];
		n-=low(n);
	}
	return value;
}
int main()
{
	int i,j,k,ans,num;
	while(scanf("%d",&N)!=EOF){
		memset(c,0,sizeof(c));
		memset(vis,0,sizeof(vis));
		for(i=1;i<=N;++i){
			scanf("%d%d",&num,&ans);
			vis[sum(num+1)]++;
			add(num+1,1);
		}
		for(i=0;i<N;++i){
			printf("%d\n",vis[i]);
		}
	}
	return 0;	
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

关于树状数组一些有意思的东西

嘛~最近刚刚学会树状数组,写个blog记录一下心得。树状数组呢,核心是一个叫lowbit的东西,lowbit(x)=x&-x=x的最后一位1的大小。 一、一个经典问题 一个初始值为0的k位计数器...
  • TA201314
  • TA201314
  • 2016年04月28日 09:23
  • 1577

对树状数组的一点理解

树状数组 一、概述 树状数组是一种 用数组进行存储的 自下而上进行操作的  多叉树。 最基本的应用就是维护一个支持两种操作的数列:1.让A[i]加上某数X     2.求一个区间A[L] + A[L+...
  • u012891242
  • u012891242
  • 2015年04月13日 17:01
  • 1316

求逆序对 (树状数组版)

基本思想和线段树求解逆序数是一样的,前一篇《求逆序对 线段树版》也介绍过,先对输入数组离散,数组里的元素都不相同可以直接hash,存在相同的数话可以采用二分。 离散化后对于每个f[i],找到f[i]...
  • u013923947
  • u013923947
  • 2014年08月18日 14:53
  • 721

离散化+树状数组求逆序数

题目:POJ2299   离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0---999 999 999;显然数组不肯能这么 大;而N的最大范围是50...
  • ACdreamers
  • ACdreamers
  • 2013年01月19日 14:52
  • 4233

详解树状数组 区间修改求和

呃.... 我这个人 ... 看到好东西就想转..... 其实这个问题自己之前研究了一下 懒得写 转载一篇吧... 从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区...
  • BlackJack_
  • BlackJack_
  • 2017年07月11日 20:22
  • 929

树状数组求区间最大值

讲这个的博文已经不少了,但感觉不够详细不够通俗易懂,所以我尝试着更详细更通俗易懂的说一下我的理解。   这个算法只支持单点修改和区间查询最值。每一次维护和查询的时间复杂度都是O((logn)^2),但...
  • u010598215
  • u010598215
  • 2015年09月04日 10:42
  • 5141

树状数组与其应用(Python实现)(1)

数组-树状数组如果程序需要维护一个数组的**前缀和**,S[i] = a[0]+ a[1] + …… + a[i-1]. 那么一旦数组中的一个元素 a[k]发生改变,则S[k+1] …… S[N] 都...
  • QHjust
  • QHjust
  • 2016年05月26日 15:28
  • 472

NOIP提高组——树状数组

树状数组相较于线段树通俗易懂,代码简单。 先写点更新,区间查询。 #include using namespace std; const int MAXN = 500000; int bit[MA...
  • G1342522389
  • G1342522389
  • 2017年08月24日 21:35
  • 160

hdu 5147 Sequence II(树状数组,前缀和,后缀和)

Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To...
  • acm_cxq
  • acm_cxq
  • 2016年07月14日 23:01
  • 432

【小结】树状数组的区间修改与区间查询

第一次听到树状数组是zsl来讲课QAQ 然后当时他给我们绕了很久 = = 嗯没懂…………结果后来发现这东西实际上是个简单又好用的玩意QAQ [ 1 ]  树状数组的本职是单点修改+区间查询 维护前...
  • qq_21841245
  • qq_21841245
  • 2015年02月26日 21:46
  • 8981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj1541Stars【树状数组】
举报原因:
原因补充:

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