zoukankan      html  css  js  c++  java
  • 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
    ",ans[i]);
        }
        
    } 
  • 相关阅读:
    典型用户
    站立会议5
    站立会议4
    《构建之法》阅读笔记05-需求分析
    站立会议3
    编写Android程序Eclipse连不上手机。
    站立会议2
    站立会议1
    第七周学习进度
    shiro之 散列算法(加密算法)
  • 原文地址:https://www.cnblogs.com/feijimoyan/p/7896202.html
Copyright © 2011-2022 走看看