求助!我第一个点的输出跟题解完全一样,结果全WA。
查看原帖
求助!我第一个点的输出跟题解完全一样,结果全WA。
759346
8326abc楼主2023/7/9 07:24

第一点显示: Wrong Answer.wrong answer On line 2 column 1, read f, expected m. 已经调了几个小时了

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e4;
int n,m;
int x,y;
int a[N+5],b[N+5];
map<int,int> q;
int read()
{
	int res=0,f=1;
	char c=getchar();
	if(c<'0'||c>'9')
	{
		if(c=='-')
		{
			f=-1;
		}
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		res=10*res+c-'0';
		c=getchar();
	}
	return res*f;
}
struct ST
{
	int l,r;
	int max_ye;
	int max_jr;
}t[4*N+5];
void build(int p,int l,int r)
{
	t[p].l=l;
	t[p].r=r;
	if(l==r)
	{
		t[p].max_ye=a[l];
		t[p].max_jr=b[l];
		return; 
	}
	int mid=(l+r)>>1;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
	t[p].max_ye=max(t[p*2].max_ye,t[p*2+1].max_ye);
	t[p].max_jr=max(t[p*2].max_jr,t[p*2+1].max_jr);
}
int ask(int p,int l,int r)
{
	if(l<=t[p].l&&r>=t[p].r )
	{
		return t[p].max_jr ;
	}
	int val=0;
	int mid=(t[p].l+t[p].r)>>1;
	if(l<=mid)
	{
		val=max(val,ask(p*2,l,r));
	}
	if(r>mid)
	{
		val=max(val,ask(p*2+1,l,r));
	}
	return val;
}
int find(int p,int x)
{
	if(t[p].l==t[p].r )
	{
		return t[p].max_ye ;
	}
	if(t[p*2].max_ye >x)
	{
		return find(p*2,x);
	}
	else
	{
		return find(p*2+1,x);
	}
}
void solve1()
{
	int Y=ask(1,q[y],q[y]);
	int X=ask(1,q[x],q[x]);
	if(Y<X)
	{
		printf("false\n");
		return;
	}	
	int w=0;
	if(q[x]==q[y]+1)
	{
		w=1;
	}
	else
	{
		int W=ask(1,q[y]+1,q[x]-1);
		if(W<X)
		{
			w=1;
		}
	}
	if(!w)
	{
		printf("false\n");
		return;
	}
	int num=q[x]-q[y]-1;
	if(x-y-1==num)
	{
		printf("true\n");
		return;
	}
	printf("maybe\n");
	return;
}
void solve2()
{
	int u=y;
	y=find(1,y);
//	cout<<endl<<"##  "<<y<<endl; 
	//cout<<"@@@  "<<y<<endl;
	if(q[x]==q[y])
	{
		printf("maybe\n");
		return;
	}
	int X=ask(1,q[x],q[x]);
//	cout<<X<<endl;	
	int w=0;
	int W=ask(1,q[y],q[x]-1);
//	cout<<W<<endl;
	if(W>=X)
	{
		printf("false\n");
		return;
	}
	printf("maybe\n");
	return;
}
void solve3()
{
	int u=x;
	x=find(1,x);
	if(q[y]+1==q[x])
	{
		printf("maybe\n");
		return;
	}
	int W=ask(1,q[y]+1,q[x]-1);
	if(W>=y)
	{
		printf("false\n");
		return;
	}
	printf("maybe\n");
	return;
}
signed main()
{
//	freopen("P2471_1.in","r",stdin);
//	freopen("56.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
		q[a[i]]=i;
		b[i]=read();
	}
	a[0]=-1e9-1;
	b[0]=0;
	a[n+1]=1e9+1;
	b[n+1]=1e9+1;
	q[-1e9-1]=0;
	q[1e9+1]=n+1;
	build(1,0,n+1);
	m=read();
	//cout<<endl<<"###  "<<t[1].max_jr<<"  "<<t[1].max_ye <<endl;
	for(int i=1;i<=m;i++)
	{
		//cout<<i<<"  ";
		y=read();
		x=read();
		if(x<y)
		{
			printf("false\n");
			continue; 
		}
		if(x==y)
		{
			//printf("true\n");
			printf("false\n");
			continue;
		}
		if(q[y]&&q[x])
		{
			solve1();
			continue;
		}
		if(!q[y]&&q[x])
		{
			solve2();
			continue;
		}
		if(q[y]&&!q[x])
		{
			solve3();
			continue;
		}
		if(!q[y]&&!q[x])
		{
			printf("maybe\n");
		}
	}
}

2023/7/9 07:24
加载中...