这个问题可以通过使用链表数据结构来解决。我们可以使用一个数组来存储每个卡片的左右邻居,然后对于每个插入操作,我们都更新相应的邻居信息。
以下是使用C++的代码实现:
#include <iostream>
#include <vector>
using namespace std;
struct Node {
int left, right;
};
int main() {
int N;
cin >> N;
vector<Node> nodes(N + 1);
for (int i = 2; i <= N; i++) {
int x, p;
cin >> x >> p;
if (p == 0) {
nodes[i].right = x;
nodes[i].left = nodes[x].left;
nodes[nodes[x].left].right = i;
nodes[x].left = i;
} else {
nodes[i].left = x;
nodes[i].right = nodes[x].right;
nodes[nodes[x].right].left = i;
nodes[x].right = i;
}
}
int x = 1;
while (nodes[x].left != 0) {
x = nodes[x].left;
}
while (x != 0) {
cout << x << " ";
x = nodes[x].right;
}
return 0;
}
在这段代码中,我们首先读取输入的卡片数N。然后我们创建一个数组来存储每个卡片的左右邻居。然后我们对于每个插入操作,我们都读取输入的x和p,然后更新相应的邻居信息。��后,我们从最左边的卡片开始,依次输出每���卡片的编号。