您的位置:首页 > 其它

hdu 1754

2013-07-29 14:30 393 查看
基础题目

#include <iostream>
#include <cstdio>
#include <algorithm>
const int maxn = 210000;
using namespace std;
int st[maxn << 2];

inline void GetMax(int rt) { st[rt] = max(st[rt << 1],st[rt << 1 | 1]); }

void BuildTree(int rt, int l, int r){
if(l == r){
scanf("%d",&st[rt]);
return ;
}
int mid = (l + r) >> 1;
BuildTree(rt << 1, l, mid);
BuildTree(rt << 1 | 1, mid + 1, r);
GetMax(rt);
}
void Update(int a, int b,int rt, int l, int r){
if( l == r){
st[rt] = b;
return ;
}
int mid = (l + r) >> 1;
if(a <= mid) Update( a, b, rt << 1, l, mid);
else Update( a, b, rt << 1 | 1, mid + 1, r);
GetMax(rt);
}
int Query(int a, int b, int rt, int l, int r){
if(a <= l && r <= b)
return st[rt];
int mid = (l + r) >> 1;
int Max = -999999999;
if(a <= mid ) Max = max( Max, Query( a, b, rt << 1, l, mid));
if(b > mid ) Max = max( Max, Query( a, b, rt << 1 |1 ,mid + 1, r));
return Max;
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m)){
BuildTree(1,1,n);
char s[2];
int x,y;
for(int i = 1; i <= m; ++i){
scanf("%s %d %d",s,&x,&y);
if(s[0] == 'Q') printf("%d\n",Query( x, y, 1, 1, n));
else Update( x, y, 1, 1, n);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线段树 hdu