zoukankan      html  css  js  c++  java
  • poj 2352 Stars(线段树)

    题意:给出N个星星的坐标,level[x]表示在当前节点左下方的星星的个数,然后让你输出level[0] . level[1] .....的值。星星的坐标按y的升序给出。

    思路:简单线段树,每当给出一个坐标,在他所在区间就自加1,然后查到该节点,得出在左下方的星星数,就可以了。

    看代码吧,

    View Code
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <math.h>
    #define N 32005
    #define M 15005
    using namespace std ;
    
    int p[8*N] , num[M] ;
    int n ;
    
    int find( int id , int pos , int ll , int rr )
    {
        p[id]++ ;
        if ( pos == rr ) return p[id] - 1 ;//减去他自身
        int mid = ( ll + rr ) / 2 ;
        if ( pos <= mid )
        return find( 2*id , pos , ll , mid );//搜左子树
        else
        return p[2*id] + find( 2*id+1 , pos , mid+1 , rr );//搜右子树,加上左子树的个数
    }
    
    int main()
    {
        int i , x , y , k ;
    
        while( scanf( "%d" , &n ) != EOF )
        {
            memset( num , 0 , sizeof( num ));
            memset( p , 0 , sizeof( p ));
            int maxx = N ;
            for ( i = 1 ; i <= n ; i++ )
            {
                scanf( "%d%d" , &x , &y );
                k = find( 1 , x , 0 , maxx );
                //cout<<k<<endl;
                num[k]++ ;
            }
            //cout<<endl;
            for ( i = 0  ; i < n ; i++)
            {
                printf( "%d\n" , num[i] );
            }
        }
        return 0 ;
    }
  • 相关阅读:
    线性时间选择
    ios理解 Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
    ef
    c# 采集 获取网页数据内容 一会超时的问题
    entity4.1
    逐渐约束
    entity4.1
    ObjectContext.Refresh
    使用内存表
    MVCdropdownlist
  • 原文地址:https://www.cnblogs.com/misty1/p/2625356.html
Copyright © 2011-2022 走看看