zoukankan      html  css  js  c++  java
  • POJ 2352 Stars(树状数组)

    点我看题目

    题意 : 给你若干个星星,然后给出你每个星星的坐标(按照y递增的顺序给出,若是y相同就按照x递增的顺序给出),定义所谓的星星级别为横纵坐标不超过自己的星星的个数。问级别0到n-1的星星各有多少个。

    思路 :因为当前的星星与后面的星星没有关系,所以只要把x之前的横坐标加起来就行,树状数组模板题,但是树状数组下标是从1开始的,所以x要加1。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    
    using namespace std;
    
    const int maxn = 100000 ;
    int tree[maxn+10] ;//树状数组
    inline int lowbit(int x)//lowbit(i)表示i最低的二进制位
    {
        return(x&(-x)) ;
    }
    void add(int x)
    {
        for(int i = x ; i <= maxn ; i += lowbit(i) )
        {
            tree[i] += 1 ;
        }
    }
    int get(int x)
    {
        int sum = 0 ;
        for(int i = x ; i ; i -= lowbit(i))
        {
            sum += tree[i] ;
        }
        return sum ;
    }
    int main()
    {
        int n ;
        int ans[maxn] ;//保存等级
        while(scanf("%d",&n)!=EOF)
        {
            int x,y ;
            memset(ans,0,sizeof(ans)) ;
            for(int i = 0 ; i < n ; i++)
            {
                scanf("%d %d",&x,&y) ;
                x++ ;y++ ;
                ans[get(x)]++ ;
                add(x) ;
            }
            for(int i = 0 ; i < n ; i++)
            printf("%d
    ",ans[i]) ;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    PHP+AJAX 验证码验证用户登录
    2014-05-09 总结
    2014-05-08 总结(补充)
    2014-05-08 总结
    2014-05-07 总结
    14-6-2
    php
    5-23
    PHP
    5-22
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3556561.html
Copyright © 2011-2022 走看看