HDU 1754 点更新段查询最大值线段树
来源:互联网 发布:win7内存优化 编辑:程序博客网 时间:2024/05/17 05:09
由于自己做代码优化时,条件不清晰,两个变量写错导致WA了两次,不应该!
#include<iostream>#include<cstdio>#define MAXN 222222using namespace std;int tree[MAXN<<2];int N,M;void pushUp( int rt ){ tree[rt]=max(tree[rt<<1],tree[rt<<1|1]);}void build( int l,int r,int rt ){ if( l==r ) { scanf( "%d",&tree[rt] ); return ; } int m=(l+r)/2; build( l,m,rt<<1 ); build( m+1,r,rt<<1|1 ); pushUp(rt);}int query( int L,int R,int l,int r,int rt ){ if( L<=l&&r<=R ) return tree[rt];int m=(l+r)/2,ret=0;if( m>=R )return query( L,R,l,m,rt<<1 );if( m+1<=L )return query( L,R,m+1,r,rt<<1|1 );ret=max(ret,query(L,R,l,m,rt<<1));ret=max(ret,query(L,R,m+1,r,rt<<1|1));return ret;}void update( int pt,int v,int l,int r,int rt ){ if( l==r ) { tree[rt]=v; return ; } int m=(l+r)/2; if( pt<=m ) update( pt,v,l,m,rt<<1 ); else update( pt,v,m+1,r,rt<<1|1 ); pushUp(rt);}int main(){ while( scanf("%d %d",&N,&M)!=EOF ) { build( 1,N,1 ); char str[111]; gets(str); while( M-- ) { gets(str); int n1,n2; if( sscanf(str,"Q %d %d",&n1,&n2) ) printf( "%d\n",query(n1,n2,1,N,1) ); else if( sscanf(str,"U %d %d",&n1,&n2) ) update( n1,n2,1,N,1 ); } } return 0;}
- HDU 1754 点更新段查询最大值线段树
- HDOJ 1754 单点更新段查询最大值 初级线段树
- HDU 1166 点更新段查询线段树
- HDU 1754 I Hate It 线段树 最大值 点更新
- [线段树 点更新 段查询]A
- 线段树 单点更新查询 区间最大值 hdu 2795 Billboard
- HDOJ 1166 点更新段查询求和 初级线段树
- hdu 1754 I Hate It(线段树 点更新 最大值)
- 线段树(区间最大值查询和点修改)——I Hate It ( HDU 1754 )
- [线段树 段更新] HDU
- 线段树 点更新和段更新
- HDU 1754 线段树单点更新求最大值
- hdu 1754 线段树单点更新求最大值
- 【线段树-单点更新区间最大值】hdu 1754
- hdu 1698 线段树 成段更新
- hdu 4325 线段树 成段更新
- hdu 4107 线段树 成段更新
- HDU 4027 ( 线段树 -- 成段更新)
- Oracle sqlplus的@符号
- 推荐一系列优秀的Android开发源码
- Ruby笔记–正则表达式
- UML(uml:unified modeling language.)学习笔记
- SWUN 1439 - 苦逼的生活刚刚开始
- HDU 1754 点更新段查询最大值线段树
- Android上的Ruby模拟器:Ruboto
- vim 用法
- MFC对话框右上角的叉叉
- oracle监听器无法启动,提示“错误1067:进程意外终止”
- 网传手机按键音暴露密码 警方提醒谨防新型骗术
- Rails中***_url与***_path区别
- C# MDI窗体菜单合并工具栏
- 雨中飘荡的回忆