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");
			}
			
		}
		
		

	}

}

这道题其实不难,就是每一次将入栈序列的值压入栈中,然后对栈进行判断,如果栈非空并且栈顶元素等于出栈序列此时对应的元素,那我们就把栈顶元素出栈,就这样,当入栈序列元素全部入栈后,也就是循环结束后,如果栈为空,那么就是符合条件,若非空,那么就是不符合条件