请问这是什么问题
  • 板块灌水区
  • 楼主Love__Elaina
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/5/31 16:55
  • 上次更新2023/10/23 14:14:43
查看原帖
请问这是什么问题
776075
Love__Elaina楼主2023/5/31 16:55

在题目 P1531 中,提交了发现全红,我下载了第一个测试点的数据,但是测试后我的输出和该测试点的数据输出一致,但是却给我判错,这是为什么

评测记录

源代码

#include<bits/stdc++.h>
using namespace std;
struct node{
	int l,r;
	int MAX;
}t[1000099];
int a[200099],m,n;
void build(int l,int r,int k)
{
	t[k].l=l,t[k].r=r;
    int mid=(r+l)/2;
	if(l==r){
    	t[k].MAX=a[l];
    	return;
	}
	build(l,mid,k*2);
	build(mid+1,r,k*2+1);
	t[k].MAX=max(t[k*2].MAX,t[k*2+1].MAX);
}
void change(int p,int k,int b)
{
	if(t[k].l==t[k].r){
		if(t[k].MAX<b)t[k].MAX=b;
		return;
	}
	int mid=(t[k].l+t[k].r)/2;
	if(p<=mid) change(p,k*2,b);
	if(p>=mid+1)change(p,k*2+1,b);
	t[k].MAX=max(t[k*2].MAX,t[k*2+1].MAX);
}
int ask(int l,int r,int k)
{
	if(t[k].l>=l&&t[k].r<=r) return t[k].MAX;
	int ans=-1;
	int mid=(t[k].l+t[k].r)/2;
	if(l<=mid) ans=max(ask(l,r,k*2),ans);
	if(r>=mid+1) ans=max(ask(l,r,k*2+1),ans);
	return ans;
}
char c;
int K,b;
int main()
{
	//freopen("P1531_1.in","r",stdin);
	//freopen("OUT.txt","w",stdout);
   	scanf("%d%d",&n,&m);
   	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
   	build(1,n,1);
   	for(int i=0;i<m;i++)
   	{
   		c=getchar();
   		scanf("%c%d%d",&c,&K,&b);
   		if(c=='Q') printf("%d\n",ask(K,b,1));
		if(c=='U') change(K,1,b);
	}
	//for(int i=1;i<=n*2-1;i++) cout<<t[i].l<<' '<<t[i].r<<' '<<t[i].MAX<<'\n';
	return 0;
}
2023/5/31 16:55
加载中...