import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int q=scanner.nextInt();
for (int i = 0; i < q; i++) {
int n=scanner.nextInt();
int a[]=new int[n];//入栈序列
int b[]=new int[n];//出栈序列
Deque<Integer> stackDeque=new ArrayDeque<>();
for (int j = 0; j < a.length; j++) {
a[j]=scanner.nextInt();
}
for (int j = 0; j < b.length; j++) {
b[j]=scanner.nextInt();
}
int flag=0;
for (int j = 0; j < b.length; j++) {
stackDeque.push(a[j]);
while(!stackDeque.isEmpty()&&stackDeque.peek()==b[flag]) {
stackDeque.pop();
flag++;
}
}
if(stackDeque.isEmpty()) {
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
}
这道题其实不难,就是每一次将入栈序列的值压入栈中,然后对栈进行判断,如果栈非空并且栈顶元素等于出栈序列此时对应的元素,那我们就把栈顶元素出栈,就这样,当入栈序列元素全部入栈后,也就是循环结束后,如果栈为空,那么就是符合条件,若非空,那么就是不符合条件



京公网安备 11010502036488号