HDU 1541 Stars 解题报告 树状数组

HDU 1541 Stars 解题报告

题意:每个星星都有自己的level,level等于位于该颗星星左下方的星星数量(包括同行同列的星星),输出从0到N-1各个level的星星数量。
解题思路:输入的数据已经排好序了,y没用,只考虑x就行了,不难,用树状数组就行,看代码吧。记得用while输入n,不然会wa。
在这里插入图片描述

#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<map>
#include<stack>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<fstream>
#include<iomanip>
#pragma warning(disable:4996)
#define INF 0x3f3f3f3f
#define ll long long
#define PI acos(-1.0)
const int N = 200010;
const int maxn = 1e9;
using namespace std;
int n;
int a[40000];
int sum[40000];
int lowbit(int x)
{
	return x & (-x);
}
void Add(int x)//将新星星加入
{
	for (int i = x; i <= 40000; i += lowbit(i))
	{
		a[i] += 1;
	}
}
int get_sum(int x)//获取等级
{
	int total = 0;
	for (int i = x; i >= 1; i -= lowbit(i))
	{
		total += a[i];
	}
	return total;
}
int main()
{
	while (~scanf("%d", &n))
	{
		memset(a, 0, sizeof(a));
		memset(sum, 0, sizeof(sum));
		int x, y;
		for (int i = 1; i <= n; i++)
		{
			scanf("%d%d", &x, &y);
			x++;
			sum[get_sum(x)]++;
			Add(x);
		}
		for (int i = 0; i < n; i++)
		{
			printf("%d\n", sum[i]);
		}
	}
}



发布了64 篇原创文章 · 获赞 0 · 访问量 1445

猜你喜欢

转载自blog.csdn.net/weixin_45566331/article/details/104823504