P1531 I Hate It 线段树解法
P1531 I Hate It
区间最大值,区间查询最大值,单点更新
//P1531 I Hate It
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=222222;
int Max[maxn<<2];
void PushUp(int rt)
{
Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
}
void build(int l,int r,int rt)
{
if (l==r)
{
cin>>Max[rt];
return ;
}
int m=(l+r)>>1;
build(lson);
build(rson);
PushUp(rt);
}
void update(int p,int sc,int l,int r,int rt)
{
if (l==r)
{
if (Max[rt]<sc)
{
Max[rt]=sc;
}
return ;
}
int m=(l+r)>>1;
if (p<=m) update(p,sc,lson);
else update(p,sc,rson);
PushUp(rt);
}
int query(int L,int R,int l,int r,int rt)
{
if (L<=l&&r<=R)
{
return Max[rt];
}
int m=(l+r)>>1;
int ret=0;
if (L<=m) ret=max(ret,query(L,R,lson));
if (R>m) ret=max(ret,query(L,R,rson));
return ret;
}
int main()
{
int n,m;
cin>>n>>m;
build(1,n,1);
for (int i=1;i<=m;i++)
{
char c;
int x,y;
cin>>c>>x>>y;
if (c=='Q')
{
cout<<query(x,y,1,n,1)<<endl;
}
else
{
update(x,y,1,n,1);
}
}
}
浙公网安备 33010602011771号