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

POJ 2352 Stars(树状数组)

时间:2017-11-25 20:50:14      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:维护   long   std   它的   stream   tree   def   main   name   

题目链接: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(树状数组)

标签:维护   long   std   它的   stream   tree   def   main   name   

原文地址:http://www.cnblogs.com/feijimoyan/p/7896202.html

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