萌新求助,全wa了
查看原帖
萌新求助,全wa了
219298
later,when楼主2020/6/17 17:13
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y;
struct tree
{
	int l,r,maxn;	
}a[1000005]; 
int read()
{
	int x=0,t=1;
	char ch=getchar();
	while (!isdigit(ch))
	{
		if (ch=='-')
			t=-1;
		ch=getchar();		
	} 
	while (isdigit(ch))
	{
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return x*t;
}
void build(int k,int ll,int rr)
{
	a[k].l=ll;
	a[k].r=rr;
	if (ll==rr)
	{
		a[k].maxn=read();
		return ;
	}
	int mid=(ll+rr)>>1;
	build(k<<1,ll,mid);
	build(k<<1|1,mid+1,rr);
	a[k].maxn=max(a[k<<1].maxn,a[k<<1|1].maxn);
	return ;
}
void update(int k)
{
	int ll=a[k].l,rr=a[k].r;
	if (ll==rr)
	{
		a[k].maxn=max(a[k].maxn,y);
		return ;
	}
	int mid=(ll+rr)>>1;
	if (x<=mid)
		update(k<<1);
	else
		update(k<<1|1);
	a[k].maxn=max(a[k<<1].maxn,a[k<<1|1].maxn);		
}
int print(int k)
{
	int ll=a[k].l,rr=a[k].r;
	if (ll>=x&&rr<=y)
		return a[k].maxn;
	int mid=(ll+rr)>>1,ans=0;		
	if (x<=mid)
		ans=max(ans,print(k<<1));
	if (y>mid)
		ans=max(ans,print(k<<1|1));	
	return ans;	
}
int main()
{
	n=read();
	m=read();
	build(1,1,n);
	for (int i=1;i<=m;++i)
	{
		char o;
		o=getchar();
		x=read();
		y=read();
		if (o=='U')
			update(1);
		else
			printf("%d\n",print(1));		
	} 
	return 0;
} 
2020/6/17 17:13
加载中...