首页 > 代码库 > poj 2352 Stars

poj 2352 Stars

题意就是一颗星星的左下方有多少颗星星就是几级;

把每级的星星个数统计好输出就ok;

但不能用二维树状数组,会超内存,,


#include<stdio.h>
#include<string.h>
#include<iostream>
#define maxn 32001
using namespace std;
int a;
int arr[maxn];
int low(int x)
{
    return x&(-x);
}
void update(int x,int val)
{
    for(int i=x;i<=maxn;i+=i&-i)
        arr[i]+=val;
}
int getsun(int x)
{
    int temp=0;
    while(x>0)
    {
        temp+=arr[x];
        x-=low(x);
    }
    return temp;
}
int main()
{
    int stars[maxn];
    memset(stars,0,sizeof(stars));
    scanf("%d",&a);
    memset(arr,0,sizeof(arr));
    for(int i=1;i<=a;i++)
    {
        int x,y;;
        scanf("%d %d",&x,&y);
        int level=getsun(x+1);
        stars[level]++;
        update(x+1,1);
    }
    for(int i=0;i<a;i++)
        printf("%d\n",stars[i]);
    return 0;
}