hdu 1754 线段树
2012-07-31 08:57
141 查看
hdu 1754 区间求最大值
[code]
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<memory.h>
using namespace std;
const int maxn=200002;
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
int Max[maxn<<2],n,m,s[maxn];
char op[2];
void PushUP(int rt)
{
Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
}
void build(int rt,int l,int r)
{
if(l==r)
{
Max[rt]=s[l];
return ;
}
int mid=(l+r)>>1;
build(lson);
build(rson);
PushUP(rt);
}
void update(int rt,int l,int r,int idx,int data)
{
if(l==r)
{
Max[rt]=data;
return;
}
int mid=(l+r)>>1;
if(mid>=idx) update(lson,idx,data);
else update(rson,idx,data);
PushUP(rt);
}
int query(int rt,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
{
return Max[rt];
}
int mid=(l+r)>>1;
int s1=0,s2=0;
if(mid>=L) s1=query(lson,L,R);
if(R>mid) s2=query(rson,L,R);
return max(s1,s2);
}
int main()
{
int i,j,k,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)scanf("%d",&s[i]);
build(1,1,n);
for(i=1;i<=m;i++)
{
scanf("%s%d%d",&op,&a,&b);
if(op[0]=='Q')
{
printf("%d\n",query(1,1,n,a,b));
}
else
{
update(1,1,n,a,b);
}
}
}
return 0;
}
[/code]
相关文章推荐
- hdu 1754 I Hate It(线段树,单点更新)
- HDU(1754),线段树,单点替换,区间最值
- hdu 1754 I Hate It(线段树)
- hdu 1754 I hate it(线段树单点更新)
- hdu 1754 I Hate It (线段树入门题、求区间段的最大值)
- hdu1754 I Hate It(线段树)
- hdu 1754 I Hate It 线段树
- HDU-1754-I Hate It(线段树)
- hdu 1754 简单的线段树
- HDU-1754-I Hate It(线段树 点更新求最值)
- hdu 1754 I hate it 线段树维护最大值
- HDU 1754--I Hate It(线段树基础)
- HDU 1754 I Hate It(线段树基础)
- 线段树(HDU 1754 I Hate It)
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- HDU 1754 I Hate It 线段树
- [ACM] hdu 1754 I Hate It (线段树,单点更新)
- hdu1754_I Hate It(线段树)
- HDU 1754 I Hate It(线段树)
- HDU 1754 I Hate It 线段树 RMQ 支持修改数列的值