HDOJ 1754 I Hate It(线段树入门)
2014-07-17 17:18
288 查看
这是一道线段树的简单入门题,查找一段区间的最大值。用到的操作有build,update,query操作。我开始写这道题的时候总是超时,要注意两个地方,第一:如果输入Q或者U的时候,用的字符输入,必须加getchar(),这里会超时,如果用字符串貌似不用加。第二,查询操作的时候,最好不用Max的宏定义,如果 return
Max(query(l,r,2*rt),query(l,r,2*rt+1));也会超时。这和宏定义的Max的执行有关,会增加query操作的次数。
#include <iostream>#include <stdio.h>
#include <string.h>
#define INF 1000000
using namespace std;
struct tree
{
int l;
int r;
int max;
//int mid;
} T[800006];
int Max(int a,int b)
{
return a>b ? a:b;
}
void build(int l,int r,int rt)
{
T[rt].l=l;
T[rt].r=r;
if(l==r)return;
//T[rt].mid=(l+r)/2;
int mid=(l+r)/2;
build(l,mid,2*rt);
build(mid+1,r,2*rt+1);
}
void update(int l,int r,int rt,int val)
{
if(T[rt].l==l&&T[rt].r==r)
{
T[rt].max=val;
return;
}
if(l>T[rt].r||r<T[rt].l)//不在范围内
{
return;
}
update(l,r,rt*2,val);
update(l,r,rt*2+1,val);
T[rt].max=Max(T[rt*2].max,T[rt*2+1].max);
}
int query(int l,int r,int rt)
{
if(l<=T[rt].l&&r>=T[rt].r)
{
return T[rt].max;
}
if(l>T[rt].r||r<T[rt].l)//不在范围内
{
return -INF;
}
int aa=query(l,r,2*rt);
int bb=query(l,r,2*rt+1);
if(aa>bb)
return aa;
else return bb;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(T,0,sizeof(T));
build(1,n,1);
for(int i=1; i<=n; i++)
{
int x;
scanf("%d",&x);
update(i,i,1,x);
}
char c;
int a,b;
int ans=0;
while(m--)
{
getchar();//attention
scanf("%c",&c);
scanf("%d%d",&a,&b);
if(c=='Q')
{
ans=query(a,b,1);
printf("%d\n",ans);
}
if(c=='U')
{
update(a,a,1,b);
}
}
}
return 0;
}
相关文章推荐
- HDOJ1754 I Hate It 【线段树】
- HDOJ 1754 I Hate It (线段树单点更新)
- hdu 1754 I Hate It【线段树入门+模板详解】
- HDU 1754 I Hate It 线段树入门
- HDOJ 1754 I Hate It(线段树单点更新)
- hdoj&nbsp;1754&nbsp;I&nbsp;Hate&nbsp;It(线段树)
- hdoj 1754 I Hate It【线段树】
- hdoj 1754 I Hate It 【线段树】
- HDU1754——I Hate It(线段树入门)
- HDOJ 1754 I Hate It 【线段树节点更新&&求区间最大值】
- hdoj-1754 I Hate It (线段树)
- hdoj 1754 I Hate It 线段树(二)
- hdu 1754:I Hate It(线段树,入门题,RMQ问题)
- HDOJ 1754 I Hate It 线段树
- HDU 1754 I Hate It【线段树入门题,单点替换,区间最值】
- HDU 1754 I Hate It(线段树入门题)
- 20140719 「线段树 - 点替换,区间最值」 HDOJ 1754 I Hate It
- hdoj 1754 I Hate It【线段树】
- hdoj1754 I Hate It【线段树区间最大值维护+单点更新】
- hdoj 1754 I Hate It【线段树&&二叉树】【线段树求最值】