题目在这呢QAQ
这个垃圾题目我tmd调了一节课
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
const int MAXN=200001;
int a[MAXN],st[(MAXN)<<2],q[5001];
void build(int o,int l,int r)
{
if(l==r) st[o]=a[l];
else
{
int m=l+((r-l)>>1);
build(o<<1,l,m);
build((o<<1)+1,m+1,r);
st[o]=max(st[(o<<1)],st[(o<<1)+1]);
}
}
void update(int o,int l,int r,int ind,int ans)
{
if(l==r)
{
st[o]=ans;
return;
}
int m=l+((r-l)>>1);
if(ind<=m)
{
update((o<<1),l,m,ind,ans);
}
else
{
update((o<<1)+1,m+1,r,ind,ans);
}
st[o]=max(st[(o<<1)],st[(o<<1)+1]);
}
int query(int o,int l,int r,int ql,int qr)
{
if(ql>r||qr<l) return -1;
if(ql<=l&&qr>=r) return st[o];
int m=l+((r-l)>>1);
int p1=query((o<<1),l,m,ql,qr);
int p2=query((o<<1)+1,m+1,r,ql,qr);
return max(p1,p2);
}
int main()
{
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
int i,n,m,j,t=0;
string c1;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
build(1,1,n);
for(i=1;i<=m;i++)
{
int b,c;
//c1=getchar();
cin>>c1;
scanf("%d%d",&b,&c);
if(c1=="Q") printf("%d\n",query(1,1,n,b,c));
if(c1=="U")
{
if(a[b]<c) a[b]=c,update(1,1,n,b,c);//如果大就变化
}
}
//fclose(stdin);
//fclose(stdout);
return 0;
}
1:换行符读入卡了我好半天,cin忽略换行符(cin大法好);
2:又一次不读题。