zoukankan      html  css  js  c++  java
  • hdu2795Billboard(线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=2795

    单点更新,树存储的为某一行内剩余的长度

    // File Name: hdu2795.cpp
    // Author: bo_jwolf
    // Created Time: 2013年08月16日 星期五 22时13分41秒
    
    #include<vector>
    #include<list>
    #include<map>
    #include<set>
    #include<deque>
    #include<stack>
    #include<bitset>
    #include<algorithm>
    #include<functional>
    #include<numeric>
    #include<utility>
    #include<sstream>
    #include<iostream>
    #include<iomanip>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<ctime>
    
    using namespace std;
    #define maxn 200005
    #define lson l , m , rt << 1 
    #define rson m + 1 , r , rt << 1 | 1 
    
    int Max[ maxn << 2 ] ;
    int h  , w , n ;
    void PushUp( int rt )
    {
    	 Max[ rt ] = max( Max[ rt << 1 ] , Max[ rt << 1 | 1 ] );
    }
    
    void build( int l , int r , int rt )
    {		
    	Max[ rt ] = w ;
    	if( l == r ) 
    		return ;
    	int m = ( l + r ) >> 1 ;
    	build( lson ) ;
    	build( rson ) ;
    }
    
    int query( int x , int l , int r , int rt )
    {
    	if( l == r )
    	{
    		Max[ rt ] -= x ;
    		return l ;
    	}
    	int m = ( l + r ) >> 1 ;
    	int ret = ( Max[ rt << 1 ] >= x ) ? query( x , lson ) :query( x ,rson ) ;
    	PushUp( rt ) ;
    	return ret ;
    }
    
    
    int main()
    {
    	while( ~scanf( "%d%d%d" , &h ,&w , &n ) )
    	{
    		if( h > n ) 
    			h = n ; 
    		build( 1 , h , 1 ) ;
    		while( n-- )
    		{
    			int x ;
    			scanf( "%d" , &x ) ;
    			if( Max[ 1 ] < x ) 
    				printf( "-1
    " ) ;
    			else
    				printf( "%d
    " , query( x , 1 , h , 1 ) ) ;
    		}
    	}
    return 0;
    }


  • 相关阅读:
    四种常用正则表达式
    解读tomcat的server.xml文件
    存储过程与函数的区别
    Servlet如何处理一个请求?
    Oracle归档模式相关
    常用几个Struts2标签
    Js中比较时间大小
    传值出现中文乱码问题
    JAVA常用转义符
    HDU 5967(LCT)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3265166.html
Copyright © 2011-2022 走看看