#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
int l[n], r[n];
for (int i = 0; i < n; i++) {
cin >> l[i] >> r[i];
}
int time = 0;
for (int i = 0; i < n; i++) {
// 如果前面没有人排在当前学生前面,则开始结账
if (time < l[i]) {
time = l[i];
}
// 如果当前学生的忍耐极限时间超过了当前时间,则开始结账
if (time <= r[i]) {
cout << time << " ";
time++;
} else {
cout << "0 ";
}
}
cout << endl;
}
return 0;
}
首先,我们读取输入的整数 T
,表示有 T
组测试数据。然后,使用 while
循环处理每组测试数据。
在每组测试数据中,我们首先读取整数 n
,表示学生的数量。然后,使用两个数组 l
和 r
分别存储每个学生的到达时间和忍耐极限时间。
接下来,使用变量 time
来记录当前时间。我们遍历每个学生,根据题目描述的规则判断他们开始结账的时间。
如果前面没有人排在当前学生前面(即当前时间小于学生的到达时间 l[i]
),则开始结账的时间为学生到达时间。
如果当前学生的忍耐极限时间(r[i]
)大于等于当前时间(time
),则开始结账的时间为当前时间,并将 time
加一。
最后,根据题目要求输出每个学生开始结账的时间或者输出 0
表示他们放弃结账。