• hdu1753I Hate It(线段树)


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

    单点更新,区间求最值

    // File Name: hdu1754.cpp
    // Author: bo_jwolf
    // Created Time: 2013年08月16日 星期五 11点27分03秒
    
    #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 lson l , mid , rt << 1 
    #define rson mid + 1 , r , rt << 1 | 1 
    
    const int maxn = 200005 ;
    //int sum[ maxn << 2 ] ;
    
    struct node
    {
    	int Max ;
    }tree[ maxn << 2 ] ;
    
    void PushUp( int rt )
    {
    	tree[ rt ].Max  = max( tree[ rt << 1 ].Max , tree[ (rt << 1 | 1 ) ].Max ) ;
    }
    void build( int l , int r , int rt )
    {
    	if( l == r )
    	{
    		scanf( "%d" , &tree[ rt ].Max );
    		return ;
    	}
    	int mid = ( l + r ) >> 1 ;
    	build( lson ) ;
    	build( rson ) ;
    	PushUp( rt ) ;
    }
    
    void update( int p , int add , int l , int r , int rt )
    {
    	if( l == r )
    	{
    		tree[ rt ].Max  = add ;
    		return ;
    	}
    	int mid = ( l + r ) >> 1 ;
    	if( p <= mid )
    		update( p , add , lson ) ;
    	else
    		update( p , add , rson ) ;
    	PushUp( rt ) ;
    }
    
    int query( int L , int R , int l , int r , int rt )
    {
    	if( L <= l && r <=R )
    	{
    		return tree[ rt ].Max ;
    	}
    	int mid = ( l + r ) >> 1 ;
    	int ret = 0 ; 
    	if( L <= mid )
    			ret = max( ret , query( L , R , lson ) ) ;
    	if( R > mid )
    			ret = max( ret , query( L , R , rson ) );
    	return ret ;
    }
    
    int main()
    {
    	int T , n , m ; 
    	while( scanf( "%d%d" , &n , &m ) != EOF )
    	{
    		build( 1 , n , 1 ) ;
    		char op[ 10 ] ;
    		while( m-- )
    		{
    			scanf( "%s" , op ) ;
    			int a , b ;
    			scanf( "%d%d" , &a , &b ) ;
    			if( op[ 0 ] == 'Q' )
    				printf( "%d
    " , query( a , b , 1 , n , 1 ) ) ;
    			else
    				update( a , b , 1 , n , 1 ) ;
    		}
    	}
    return 0;
    }


  • 相关阅读:
    华为机试再回忆--第一题
    TCP快速重传和快速恢复
    MongoDB安装,打开及增,删,改,查
    C++默认构造函数的一点说明
    动态链接库编程范例
    使用skin++进行MFC界面美化范例
    分享下我的博客园CSS
    windows多线程同步总结
    TestDirector 8.0 配置说明
    windows2003安装TestDirector8.0 安装时输入用户名密码 提示错误
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3263048.html
Copyright © 2020-2023  润新知