Description
有一个隧道,某一天一共有 n 辆车通过且都只通过一次。交通规章规定这个隧道里不能超车,因此在隧道的入口和出口都有监控,能记录下这些车出入隧道的顺序。
但总有一些法外之徒,喜欢飞车,这是很不好的行为。
规定如下:
如果车b 本来是排在车a的后面进入隧道
但隧道中进行了超车行为,于是车b先于车a出隧道了。
现在请求出一共多少辆车发生了超车行为,注意超过一辆车与超过多辆车,都只按一次计算。
即只需要有多少车发生了超车行为。
Format
Input
第一行一个整数n表示车辆的总数(2<=n<=1e5)
第二行n个整数 a_i(1<=a_i<=n)表示依次进入隧道的车辆的编号
第三行n个整数 b_i(1<=b_i<=n)表示依次离开隧道的车辆的编号
Output
输出一共有多少车辆违规了
Samples
输入数据 1
5
3 5 2 1 4
4 3 2 5 1
Copy
输出数据 1
2
Copy
输入数据 2
4
1 3 2 4
4 3 2 1
Copy
输出数据 2
3
Copy
Hint
编号为4与2的车,超车了。
#include<bits/stdc++.h>
using namespace std;
long long int d=1e7;
queue<int> q1,q2;
bool f[10000001],l[200005],op[2000009];
long long int z[1000001]={1},sd,g[100000],o[1000001],a[102102],mi;
long long int n,m,mo=1e9+7;
long long int s,k;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>mi;
q1.push(mi);
}
for(int i=1;i<=n;i++){
cin>>mi;
q2.push(mi);
}
int h1=1,h2=1;
while(h1<=n&&h2<=n){
if(q1.front()!=q2.front()){
if(l[q1.front()]==0){
l[q2.front()]=1;
s++;
q2.pop();
h2++;
}
else if(l[q1.front()]!=0){
q1.pop();
h1++;
}
}
else if(q1.front()==q2.front()){
q1.pop();
q2.pop();
h1++;
h2++;
}
}
cout<<s;
}