看入栈序列判断出栈序列是否合法

时间:2025-02-14 11:57:04
#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; }