看入栈序列判断出栈序列是否合法
#include<bits/stdc++.h>
using namespace std;
int a[10000]={0}; //哈希表,记录数字n1的入栈顺序
int main(){
int i=0;
cin>>i;
while(i--){
int count;cin>>count;
for(int j=1;j<=count;j++){
int n1;cin>>n1;
a[n1]=j; //记录某数字n1的入栈顺序
}
int b[10000];
for(int j=1;j<=count;j++){
cin>>b[j];
}
int flag=1;
for(int j=1;j<count;j++){
int t=a[b[j]]; //当前数字的入栈顺序
int m=-1;
for(int k=j+1;k<=count;k++){
if(a[b[k]]<t){
if(m==-1){ //遇到第一个比b[k]先入栈的数字
m=a[b[k]];
}
else{
if(m<a[b[k]]){
cout<<"NO"<<endl;
flag=0;
break;
}
m=a[b[k]];
}
}
}
}
if(flag) cout<<"YES"<<endl;
}
return 0;
}