hdu 1754 I Hate It 线段树
#include <stdio.h>
#include <string.h>
#define N 200200
int max[4*N];
int n,m;
int A,B;
int L,R;
int MAX(int a,int b)
{
if(a>b) return a;
else return b;
}
int MIN(int a,int b)
{
if(a<b) return a;
else return b;
}
void update(int o,int l,int r)
{
int m=(l+r)/2;
if(l==r) max[o]=B;
else
{
if(A<=m) update(o*2,l,m);
else update(o*2+1,m+1,r);
max[o]=MAX(max[o*2+1],max[o*2]);
}
}
int query(int o,int l,int r)
{
int m=(l+r)/2;
int ans=-1;
if(L<=l&&R>=r) return max[o];
if(L <= m) ans = MAX ( query(2*o,l,m) , ans );
if(R > m) ans = MAX ( query(2*o+1,m+1,r) , ans );
return ans;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int i;
char c;
for(i=1;i<=n;i++)
{
A=i;
scanf("%d",&B);
update(1,1,n);
}
getchar();
for(i=1;i<=m;i++)
{
scanf("%c",&c);
if(c=='Q')
{
scanf("%d%d",&L,&R);
printf("%d\n",query(1,1,n));
}
else if(c=='U')
{
scanf("%d%d",&A,&B);
update(1,1,n);
}
getchar();
}
}
return 0;
}

浙公网安备 33010602011771号