[Luogu1531]I Hate It

线段树裸题。。

注意初始化时设为-int_max。。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <map>
 7 #include <string>
 8 #include <vector>
 9 #include <stack>
10 using namespace std;
11 
12 const int N=400000<<2;
13 
14 int v[N];
15 
16 int n,m,M=1,a,b;
17 char str[10];
18 int main(){
19     scanf("%d%d",&n,&m);
20     memset(v,0xcf,sizeof v);
21     while(M<=n+1)M<<=1;
22     for(int i=M+1;i<=M+n;i++)scanf("%d",&v[i]);
23     for(int i=M-1;i;i--)v[i]=max(v[i<<1],v[i<<1|1]);
24     while(m--){
25         scanf("%s%d%d",str,&a,&b);
26         if(str[0]=='Q'){
27             int ret=0xcfcfcfcf;
28             for(int l=M+a-1,r=M+b+1;l^r^1;l>>=1,r>>=1){
29                 if(~l&1)ret=max(ret,v[l^1]);
30                 if(r&1)ret=max(ret,v[r^1]);
31             }
32             printf("%d\n",ret);
33         }else if(v[M+a]<b){
34             v[M+a]=b;
35             for(int i=(M+a)>>1;i;i>>=1)v[i]=max(v[i<<1],v[i<<1|1]);
36         }
37     }
38 }
View Code

 

posted @ 2016-12-31 11:59  KingSann  阅读(101)  评论(0编辑  收藏  举报