Train and Queries
[题目链接]https://www.luogu.com.cn/problem/CF1702C?contestId=146378
题意
给两个站台,判断这两个站台是否互通,互通yes,不互通no。
思路
- 站台的输入
- 站台是否见过,见过的更新记录
- 都出现过且ai最早一次比bi最晚一次早就可以了。
坑点
- 有撒撒绕,其他没什么
算法一:STL库map映射
实现步骤
- 首先第一个while循环输入站台
- for循环表示记录和更新
- 最后判断yes或no。
代码
#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表示最晚一次
//不这样要clear(),反而麻烦,不如再申请一个
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])//都出现过且ai最早一次比bi最晚一次早就可以了。
puts("YES");
else
puts("NO");//反之,不行
}
}
return 0;
}
总结
STL库的内容要熟记,弄懂,当然其中有些STL库中的函数要用迭代器访问。