注意看题,洛谷的题有点不一样:如果当前学生成绩比x低,就把他的成绩改为x
by litble @ 2017-06-09 07:14:40
```cpp
@[luobobo](/space/show?uid=20604) 好像改了也不行啊
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=250005
int imax[maxn<<2];
int ans1,ans2;
void create_tree(int rt,int m,int n){
if(m==n){
scanf("%d",&imax[rt]);
}
else {
create_tree(rt*2,m,(m+n)/2);
create_tree(rt*2+1,(m+n)/2+1,n);
imax[rt]=max(imax[2*rt],imax[2*rt+1]);
}
}
void update(int rt,int m,int n,int pos,int num){
if(m==n && n==pos ){
if(imax[rt]<num)
imax[rt]=num;
}
else{
if(pos<=(m+n)/2)
update(rt*2,m,(m+n)/2,pos,num);
if(pos>(m+n)/2)
update(rt*2+1,(m+n)/2+1,n,pos,num);
imax[rt]=max(imax[rt<<1],imax[rt<<1|1]);
}
}
int require(int rt,int m,int n,int M,int N){
if(M<=m && n<=N)
return imax[rt];
else{
int tmp=-1;
if(M<=(m+n)/2)
tmp=max(tmp,require(rt*2,m,(m+n)/2,M,N));
if(N>(m+n)/2)
tmp=max(tmp,require(rt*2+1,(m+n)/2+1,n,M,N));
return tmp;
}
}
int main( ){
int n,m,j,k,i,p,q,L,R;
char op;
while(scanf("%d%d",&n,&m)!=EOF){
create_tree(1,1,n);
getchar();
while(m--){
scanf("%c%d%d%*c",&op,&L,&R);
if(op=='Q')
printf("%d\n",require(1,1,n,L,R));
else
update(1,1,n,L,R);
}
}
return 0;
}
```
by ABCDXYZ @ 2017-06-22 20:36:31
%%%
by yybyyb @ 2017-07-21 22:24:07
然而现在我也是这样。。。。
by yybyyb @ 2017-07-21 22:26:36
@[yybyyb](/space/show?uid=21283) 现在呢
by 龙神哈迪斯 @ 2017-08-16 20:38:35
@[龙神哈迪斯](/space/show?uid=47901) 过了。。。。。z=
by yybyyb @ 2017-08-16 22:22:16