#include <bits/stdc++.h> using namespace std; int n, a, b; map<int, int> mp; // 定义一个map,用于存储键值对 int main() { scanf("%d", &n); // 读取输入的整数n mp[1e9] = 1; // 将1e9作为键,1作为值存入map中 while (n--) { // 循环n次 scanf("%d %d", &a, &b); // 读取输入的两个整数a和b auto itr1 = mp.lower_bound(b); // 在map中查找第一个大于等于b的键值对 if (itr1 == mp.begin()) { // 如果找到了这样的键值对 printf("%d %d\n", a, itr1->second); // 输出a和对应的值 } else { // 如果没有找到这样的键值对 auto itr2 = itr1; // 将itr1赋值给itr2 --itr2; // 将itr2指向前一个元素 if (b - itr2->first < itr1->first - b) { // 如果b与前一个元素的差小于当前元素与b的差 printf("%d %d\n", a, itr2->second); // 输出a和前一个元素的值 } else if (itr1->first - b < b - itr2->first) { // 如果当前元素与b的差小于b与前一个元素的差 printf("%d %d\n", a, itr1->second); // 输出a和当前元素的值 } else if (itr1->second < itr2->second) { // 如果当前元素的值小于前一个元素的值 printf("%d %d\n", a, itr1->second); // 输出a和当前元素的值 } else { // 如果前一个元素的值小于当前元素的值 printf("%d %d\n", a, itr2->second); // 输出a和前一个元素的值 } } if (mp.count(b) == 0 || mp[b] > a) { // 如果map中不存在键为b的元素,或者map中键为b的元素的值大于a mp[b] = a; // 将a作为键b的值存入map中 } } return 0; // 程序结束,返回0 }