HDOJ 1754 I Hate It
来源:互联网 发布:vb cmd 切换目录 编辑:程序博客网 时间:2024/06/05 06:58
单个值的更新用线段树来做已经是第二个了,这个和上一个HDOJ 1166几乎一模一样,就是原来是求区间和,这里是求区间最大值,将累加的操作换成取最大值的操作即可。单值的更新是初步,慢慢来把,下面还有区间的更新。努力努力
代码:
#include<iostream>#include<cmath>using namespace std;#define MAXN 800005int num[MAXN];void Build(int l,int r,int pt){ if( l==r){ scanf("%d",&num[pt]); return ; } int mid=(l+r)>>1; Build(l,mid,pt<<1); Build(mid+1,r,pt<<1|1); num[pt]=max(num[pt<<1],num[pt<<1|1]);}void Update(int i,int data,int l,int r,int pt){ if( l==r){ num[pt]=data; return ; } int mid=(l+r)>>1; if(i<=mid) Update(i,data,l,mid,pt<<1); else Update(i,data,mid+1,r,pt<<1|1); num[pt]=max(num[pt<<1],num[pt<<1|1]);}int Query(int L,int R,int l,int r,int pt){ if( L<=l&&R>=r) return num[pt]; int mid=(l+r)>>1; int ans=0; if(L<=mid) ans=max(ans,Query(L,R,l,mid,pt<<1)); if(R>mid) ans=max(ans,Query(L,R,mid+1,r,pt<<1|1)); return ans;}int main(){ int n,m,i,a,b; char ch; while( cin>>n>>m){ Build(1,n,1); while( m--){ cin>>ch>>a>>b; if( ch=='Q') cout<<Query(a,b,1,n,1)<<endl; else Update(a,b,1,n,1); } } return 0;}
- HDOJ 1754 I Hate It
- hdoj 1754 I Hate It
- HDOJ 1754 I Hate It
- HDOJ 1754 - I Hate It
- HDOJ 1754 I Hate It
- HDOJ 1754 I Hate It
- HDOJ 1754 I Hate It
- HDOJ 1754 I Hate It
- Hdoj 1754 I hate it
- hdoj 1754 I Hate It
- HDOJ-1754 I Hate It
- hdoj-1754-I Hate It
- hdoj 1754 I Hate It
- HDOJ 1754-I Hate It
- hdoj 1754 I Hate It
- HDU/HDOJ----1754 I Hate It
- HDOJ 1754 I Hate It(线段树)
- hdoj 1754 I Hate It(线段树)
- java excel 2003
- .NET中GC.Collect该在什么时候调用?
- win7如何关闭uac(图文详解)
- 未来IT工程师协会 会徽征集
- svn update报no such revision * 的解决方法
- HDOJ 1754 I Hate It
- Reddit联合创始人教你避免软件开发中的低级错误
- PHP上传大文件
- Using #region Directive With JavaScript Files in Visual Studio
- Rtems例程解析
- extjs对关联关系的处理
- bingmap中隐藏bing(logo)的问题
- 特别有用(2012.07.13)
- Android Http get post请求