### 思路
1. **初始化队列**:将编号为1的试卷放入队列。
2. **依次插入试卷**:从第2张试卷开始,根据输入的`x`和`p`,将试卷插入到指定位置。
3. **输出结果**:输出最终的试卷序列。
### 伪代码
```
function reorder_papers(N, operations):
queue = [1]
for i from 2 to N:
x, p = operations[i-2]
index = queue.index(x)
if p == 0:
queue.insert(index, i)
else:
queue.insert(index + 1, i)
return queue
```
### C++代码
#include <iostream>
#include <vector>
#include <list>
using namespace std;
vector<int> reorder_papers(int N, vector<pair<int, int>>& operations) {
list<int> queue;
queue.push_back(1);
for (int i = 2; i <= N; ++i) {
int x = operations[i-2].first;
int p = operations[i-2].second;
auto it = find(queue.begin(), queue.end(), x);
if (p == 0) {
queue.insert(it, i);
} else {
queue.insert(next(it), i);
}
}
return vector<int>(queue.begin(), queue.end());
}
int main() {
int N;
cin >> N;
vector<pair<int, int>> operations(N-1);
for (int i = 0; i < N-1; ++i) {
cin >> operations[i].first >> operations[i].second;
}
vector<int> result = reorder_papers(N, operations);
for (int num : result) {
cout << num << " ";
}
cout << endl;
return 0;
}
### 总结
1. **初始化队列**:将编号为1的试卷放入队列。
2. **依次插入试卷**:根据输入的`x`和`p`,将试卷插入到指定位置。
3. **输出结果**:输出最终的试卷序列。