站外题TLE求优化
  • 板块学术版
  • 楼主a2410078823
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/3 18:11
  • 上次更新2023/11/3 06:07:01
查看原帖
站外题TLE求优化
992106
a2410078823楼主2023/8/3 18:11

坐火车

给你一个长度为 n (1≤\le n\le$$2\times10 ^5) 的数组 u。代表所有的火车站。火车只能从左边的站台开到右边的站台。也就是从 u1u_1开始,再到 u2u_2,u3u_3,最后到 unu_n 。

现在给你 k(1≤\lek\le$$2\times10^5) 个询问,每个包含两个整数 aia_i和 bib_i,问你是否可以从 aia_i这个站台开始,坐火车到 bib_i。

比如:u 数组为[3,7,1,5,1,4],有以下三个询问:

  • a1a_1= 3,b1b_1 = 5 从 3 号站台坐车到 5 号站台是可能的,有以下路径:[3,7,1,5]。

  • a2a_2=1,b2b_2=7 没有路径可以从 1 号站坐车做到 7 号站台。

  • a3a_3=3,b3b_3=10 有路径可以从 3 号站台坐车到 10 号站台(10 号根本不存在)。

样例输入

3
6 3
3 7 1 5 1 4
3 5
1 7
3 10
3 3
1 2 1
2 1
1 2
4 5
7 5
2 1 1 1 2 4 4
1 3
1 4
2 1
4 1
1 2

样例输出

YES
NO
NO
YES
YES
NO
NO
YES
YES
NO
YES

附上TLE代码:

#include<bits/stdc++.h>
using namespace std;
int t,n,k,u[200005],a[200005],b[200005];
bool check(int x,int y)
{
	int p=0,q=0;
	for(int i=1;i<=n+1;i++)
	{
		if(p<q&&p!=0) return 1;
		else
		{
			if(x==u[i]) p=i;
			if(y==u[i]) q=i;
		}	
	}
	return 0;
}
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		for(int i=1;i<=n;i++) cin>>u[i];
		for(int i=1;i<=k;i++)
		{
			cin>>a[i]>>b[i];
			if(check(a[i],b[i])) cout<<"YES"<<endl;
			else cout<<"NO"<<endl;
		}
	}
	return 0;
}

2023/8/3 18:11
加载中...