题意:很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
5 6 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 2 9 Q 1 5
5 6 5 9
代码再次优化
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 int n,m,t; 9 #define lson l,m,rt<<1 10 #define rson m+1,r,rt<<1|1 11 #define root 1,n,1 12 #define m ((l+r)>>1) 13 const int maxn=205555; 14 int cow[maxn]; 15 int maxx[maxn<<2],minn[maxn<<2]; 16 int mmax=-1,mmin=9999999; 17 void pushup(int rt){ 18 maxx[rt]=max(maxx[rt<<1],maxx[rt<<1|1]); 19 } 20 void build(int l,int r,int rt){ 21 if(l==r){ 22 scanf("%d",&maxx[rt]); 23 return; 24 } 25 build(lson); 26 build(rson); 27 pushup(rt); 28 } 29 void query(int L,int R,int l,int r,int rt) { 30 if (L<=l&&r<=R){ 31 mmax=max(mmax,maxx[rt]); 32 return; 33 } 34 int ret=0; 35 if(L<=m) query(L,R,lson); 36 if(R>m) query(L,R ,rson); 37 } 38 void update(int pos,int val,int l,int r,int rt) 39 { 40 if(l==r) maxx[rt]=val; 41 else 42 { 43 if(pos<=m) update(pos,val,lson); 44 else update(pos,val,rson); 45 pushup(rt); 46 } 47 } 48 int main() 49 { 50 int i,j,k; 51 #ifndef ONLINE_JUDGE 52 freopen("1.in","r",stdin); 53 #endif 54 int q; 55 while(scanf("%d%d",&n,&q)!=EOF) 56 { 57 build(root); 58 while(q--) 59 { 60 char s[10]; 61 scanf("%s",s); 62 int a,b; 63 if(s[0]=='Q') 64 { 65 scanf("%d%d",&a,&b); 66 mmax=-99999; 67 query(a,b,root); 68 printf("%d ",mmax); 69 } 70 else 71 { 72 scanf("%d%d",&a,&b); 73 update(a,b,root); 74 } 75 } 76 } 77 return 0; 78 }