#include <iostream> #include <stack> #include <vector> using namespace std; int main() { int q; cin >> q; while (q--) { int n; cin >> n; vector<int> ruzhanxulie(n); vector<int> chuzhanxulie(n); // 读取入栈序列 for (int i = 0; i < n; i++) { cin >> ruzhanxulie[i]; } // 读取出栈序列 for (int i = 0; i < n; i++) { cin >> chuzhanxulie[i]; } stack<int> zhan; int shijilu = 0; bool panduan = true; for (int i = 0; i < n; i++) { int target = chuzhanxulie[i]; // 如果栈为空或者栈顶不是目标元素,就继续入栈直到找到目标 while (shijilu < n && (zhan.empty() || zhan.top() != target)) { zhan.push(ruzhanxulie[shijilu++]); } // 检查栈顶是否等于目标元素 if (!zhan.empty() && zhan.top() == target) { zhan.pop(); } else { panduan = false; break; } } if (panduan && zhan.empty()) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; } // 64 位输出请用 printf("%lld")