zoukankan      html  css  js  c++  java
  • hdu 1541 Stars(树状数组)

    题意:求坐标0到x间的点的个数

    思路:树状数组,主要是转化,根据题意的输入顺序,保证了等级的升序,可以直接求出和即当前等级的点的个数,然后在把这个点加入即可。

    注意:树状数组下标从1开始(下标为0的话会出错),所以把所有的x加1存储。

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    #define MAXN 32005
    #define MAXL 15005
    
    int c[MAXN];
    int lev[MAXL];
    
    int lowbit(int i){
        return i&-i;
    }
    
    void update(int i,int val){//更新函数
        while(i<=MAXN){
            c[i]+=val;
            i+=lowbit(i);
        }
    }
    
    int sum(int i){//求和函数
        int sum=0;
        while(i>0){
            sum+=c[i];
            i-=lowbit(i);
        }
        return sum;
    }
    
    int main(){
        int n,x,y,i;
        while(~scanf("%d",&n)){
            memset(c,0,sizeof(c));
            memset(lev,0,sizeof(lev));
            for(i=0;i<n;++i){
                scanf("%d%d",&x,&y);
                ++x;//树状数组从1开始,为0的话会出错
                ++lev[sum(x)];//先求和
                update(x,1);//后加1
            }
            for(i=0;i<n;++i)
                printf("%d
    ",lev[i]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    web前端-----第二弹CSS
    web前端-----第一弹html
    mysql数据库第三弹
    mysql数据库第二弹
    mysql数据库第一弹
    django
    mysql基础
    面向对象进阶
    继承、多态、多态性
    面向对象的程序设计
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4738596.html
Copyright © 2011-2022 走看看