码迷,mamicode.com
首页 > 编程语言 > 详细

POJ 2352 Stars 树状数组

时间:2014-10-15 18:09:01      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:poj   树状数组   fenwick   

题目大意:给出y值升序的一些点,定义一个点的level值为它左下方的点的数量,求每一个level有多少个点。


思路:由于y值是升序的,那么后面的点只要判断是否x值比前面的大就行了。那么就用树状数组维护。


CODE:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 50000
using namespace std;

int cnt,fenwick[MAX];
int ans[MAX];

inline void Initialize();
inline void Fix(int x);
inline int GetSum(int x);

int main()
{
	while(scanf("%d",&cnt) != EOF) {
		Initialize();
		for(int x,y,i = 1;i <= cnt; ++i) {
			scanf("%d%d",&x,&y);
			x++;
			Fix(x);
			ans[GetSum(x)]++;
		} 
		for(int i = 1;i <= cnt; ++i)
			printf("%d\n",ans[i]);
	}
	return 0;
}

inline void Initialize()
{
	memset(fenwick,0,sizeof(fenwick));
	memset(ans,0,sizeof(ans));
}

inline void Fix(int x)
{
	for(;x < MAX;x += x&-x)
		fenwick[x]++;
}

inline int GetSum(int x)
{
	int re = 0;
	for(;x;x -= x&-x)
		re += fenwick[x];
	return re;
}


POJ 2352 Stars 树状数组

标签:poj   树状数组   fenwick   

原文地址:http://blog.csdn.net/jiangyuze831/article/details/40112039

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!