分块20pts求调
  • 板块P1531 I Hate It
  • 楼主wmrqwqal & su
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/18 17:12
  • 上次更新2023/11/18 18:39:01
查看原帖
分块20pts求调
820056
wmrqwqal & su楼主2023/11/18 17:12
#include<bits/stdc++.h>
using namespace std;
long long n,m,sq,a[200010],b[200010],l[200010],r[200010],maxn[200010],x,y;
char opt;
void add(long long x,long long y)
{
	if(a[x]<y)
	{
		a[x]=y;
		maxn[b[x]]=max(maxn[b[x]],a[x]);
	}
}
void query(long long x,long long y)
{
	long long ma=0;
	for(int i=x;i<=r[b[x]];i++)
		ma=max(ma,a[i]);
	for(int i=l[b[y]];i<=y;i++)
		ma=max(ma,a[i]);
	for(int i=b[x]+1;i<=b[y]-1;i++)
		ma=max(ma,maxn[i]);
	cout<<ma<<endl;
}
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
int main()
{
	IOS;
	cin>>n>>m;
	sq=sqrt(n);
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=n;i++)
	{
		l[i]=r[i-1]+1;
		r[i]=min(n,sq*i);
		for(int j=l[i];j<=r[i];j++)
			b[j]=i,maxn[i]=max(maxn[i],a[j]);
	}
	while(m--)
	{
		cin>>opt;
		if(opt=='U')
			cin>>x>>y,add(x,y);
		else
			cin>>x>>y,query(x,y);
	}
	QwQ;
}
2023/11/18 17:12
加载中...