70求条(玄关)
  • 板块P1531 I Hate It
  • 楼主yuan__111
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/5 09:53
  • 上次更新2025/1/5 15:30:11
查看原帖
70求条(玄关)
1213517
yuan__111楼主2025/1/5 09:53
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int tree[2*N],l[2*N],r[2*N],idx;
int a[N];
int print(int L,int R)
{
	int mid=(L+R)/2;
	if(L==R)
	{
		tree[++idx]=a[R];
		return idx;
	}
	int pos=++idx;
	l[pos]=print(L,mid);
	r[pos]=print(mid+1,R);
	tree[pos]=max(tree[l[pos]],tree[r[pos]]);
	return pos;
}
int n,Q;
int work(int L,int R,int lx,int rx,int pos)
{
	if(L==lx&&R==rx)
	{
		return tree[pos];
		
	}
	int mid=(L+R)/2;
	if(rx<=mid)
	{
		return work(L,mid,lx,rx,l[pos]);
		
		
	}
	if(lx>mid)
	{
		return work(mid+1,R,lx,rx,r[pos]);
		
	}
	return max(work(L,mid,lx,mid,l[pos]),work(mid+1,R,mid+1,rx,r[pos]));
	
}
int main()
{
	cin>>n>>Q;
	for(int i=1;i<=n;i++)cin>>a[i];
	print(1,n);
	while(Q--)
	{
		char op;cin>>op;
		int lx,rx;cin>>lx>>rx;
		if(op=='Q')
		{
			cout<<work(1,n,lx,rx,1)<<endl;
		}
		else if(op=='U')
		{
			if(a[lx]<rx)a[lx]=rx;
			memset(tree,0,sizeof(tree));
			memset(l,0,sizeof(l));
			memset(r,0,sizeof(r));
			idx=0;
			print(1,n);
			
		}
	}
	return 0;
}
2025/1/5 09:53
加载中...