标签:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 200005;
int mark[MAXN << 2];
int max(int a, int b)
{
return a > b ? a : b;
}
void Max(int rt)
{
mark[rt] = max( mark[rt << 1], mark[(rt << 1) + 1] ); //开始用 rt << 1 | 1 超时了
}
void build(int l, int r, int rt)
{
if(l == r)
{
scanf("%d", &mark[rt]);
return;
}
int mid = (l + r) >> 1;
build( l, mid, rt << 1);
build( mid + 1, r, (rt << 1) + 1);
Max(rt);
}
void update( int n, int score, int l, int r, int rt)
{
if(l == r )
{
mark[rt] = score;
return;
}
int mid = ( l + r) >> 1;
if(n <= mid)
update( n, score, l, mid, rt << 1);
if(n > mid)
update( n, score, mid + 1, r, (rt << 1) + 1);
Max(rt);
}
int query(int ll, int rr , int l ,int r, int rt)
{
if(ll <= l && rr >= r)
{
return mark[rt];
}
int mid = ( l + r ) >> 1;
int m = 0;
if( ll <= mid)
m = max( m, query(ll, rr, l, mid, rt << 1));
if( rr > mid)
m = max( m, query(ll, rr, mid + 1, r, (rt << 1) + 1));
return m;
}
int main()
{
int N,M,A,B;
char ch;
while(~scanf("%d %d",&N,&M))
{
build(1, N, 1);
for(int i = 0; i< M; i++)
{
scanf("%*c%c%d %d",&ch,&A,&B);
if(ch == ‘U‘)
update(A,B,1,N,1);
else
printf("%d\n",query(A,B,1,N,1));
}
}
}
标签:
原文地址:http://www.cnblogs.com/yong-hua/p/4655937.html