POJ 2352 Stars(树状数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2352 Stars(树状数组)相关的知识,希望对你有一定的参考价值。

题目链接:http://poj.org/problem?id=2352

题目大意:给出按照Y坐标升序(如果Y坐标相同,按X坐标升序)的星星坐标,统计它的左下星星数量(左下星星数量表示X0<=X,Y0<=Y的星星),左下星星数量N就表示这个星星是第N级星星,输出各级星星的数量。

思路:因为是按照Y坐标升序输入的,所以之前输入所有X坐标比当前星星X坐标小的星星都是该星星的左下星星,我们使用树状数组来维护比当前X小的所有星星的数量。

#include<iostream>
#include<stdio.h>
#include<cstring> 
using namespace std;
#define MAXN 100050
typedef long long ll;
#define MEM(x) memset(x,0,sizeof(x))
ll tree[MAXN],ans[MAXN];
ll m;
ll lowbit(ll k){ //取位 
    return k&-k;
}

void add(ll k,ll num){//更新 
    for(ll i=k;i<=MAXN;i+=lowbit(i)) tree[i]+=num;
}

ll getsum(ll k){ //区间求和 
    ll ans=0;
    for(ll i=k;i>0;i-=lowbit(i)) ans+=tree[i];
    return ans;
}

int main(){
    ll i,x,y;
    while(~scanf("%lld",&m)){
        MEM(tree);
        MEM(ans);
        for(i=0;i<m;i++){
            scanf("%lld%lld",&x,&y);
            ans[getsum(x)]++;
            add(x,1);
        }
        for(i=0;i<m;i++) printf("%lld\n",ans[i]);
    }
    
} 

 

以上是关于POJ 2352 Stars(树状数组)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2352 Stars(树状数组)

POJ - 2352 Stars树状数组

POJ 2352Stars 树状数组

POJ-2352 Stars(树状数组)

POJ2352 Stars 树状数组

POJ 2352-Stars-树状数组