Train and Queries(训练和查询)
题意
给定数组u【所以火车站站点】,查询从ai到bi个站点是否可以进行下去(是否存在ai到bi)。如果可以输出”yes",不行输出“no"
思路
- 先判断给定的ai.bi是否在数组u中存在
- 如果存在再判断ai.bi再u中的顺序是否为正(顺)的
算法一:STL库的map函数
实现步骤
- map映射l,r(最早,最晚)
- if记录不断更新出现的最后一次
- 第二个if条件:如果ai.bi都出现过且ai最早一次比bi最晚一次早
代码
#include <map>//映射要用
#include <stdio.h>
using namespace std;
int t,n,k,x,a,b,i;
int main(){
scanf("%d",&t);//火车站的数量
while(t--){
map<int,int>l,r;
//l表示最早一次,r表示最晚一次
scanf("%d %d",&n,&k);
for(i=1;i<=n;++i){
scanf("%d",&x);
if(!l[x])//第一次出现
l[x]=i;//记录下来
r[x]=i;//不断更新出现的最后一次
}
while(k--){
scanf("%d %d",&a,&b);
if(l[a]&&l[b]&&l[a]<=r[b])
puts("YES");
else
puts("NO");//反之,不行
}
}
return 0;
}