给你一个长度为 n (1≤ n\le$$2\times10 ^5) 的数组 u。代表所有的火车站。火车只能从左边的站台开到右边的站台。也就是从 u1开始,再到 u2,u3,最后到 un 。
现在给你 k(1≤k\le$$2\times10^5) 个询问,每个包含两个整数 ai和 bi,问你是否可以从 ai这个站台开始,坐火车到 bi。
比如:u 数组为[3,7,1,5,1,4],有以下三个询问:
a1= 3,b1 = 5 从 3 号站台坐车到 5 号站台是可能的,有以下路径:[3,7,1,5]。
a2=1,b2=7 没有路径可以从 1 号站坐车做到 7 号站台。
a3=3,b3=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;
}