hdoj1541

Problem : 1541 ( Stars )     Judge Status : Accepted
RunId : 2816947    Language : C++    Author : huwenbiao
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
/***************************************************************\
*Author:Hu Wenbiao
*Created Time: Sat 14 Aug 2010 10:01:51 AM CST
*File Name: main.cpp
*Description:树状数组。因为y是升序的,从前往后一个一个地计算各
*星星,只用x座标即可。
\***************************************************************/

//*========================*Head File*========================*\\

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*----------------------*Global Variable*----------------------*/
//#define lowbit(i) i&(-i);
int C[32100],level[15100],N,x,_max;
//*=======================*Main Program*=======================*//
using namespace std;

int
lowbit(int i){
return
i&(-i);
}

int
sum(int i){
int
sum=
0;
while
(i>
0){
sum+=C[i];
i-=lowbit(i);
}

return
sum;
}

void
add(int i,int diff){
while
(i<=_max){
C[i]+=diff;
i+=lowbit(i);
}
}

int
main(){

//freopen("input","r",stdin);
_max=32001;
while
(scanf(
"%d",&N)!=EOF){
memset(C,
0,sizeof(C));
memset(level,
0,sizeof(level));
for
(int i=
0;i<N;i++){
scanf(
"%d%*d",&x);
x++;
//座标要加1,因为座标为0时add(int i,int diff)会出问题
level[sum(x)]++;
add(x,
1);
}

for
(int i=
0;i<N;i++)
printf(
"%d\n",level[i]);
}
}
posted @ 2010-08-14 10:43  open source  阅读(182)  评论(0编辑  收藏