[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 }