冷血格斗场

#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
}

 

posted @ 2024-01-06 16:51  Boy^  阅读(37)  评论(0)    收藏  举报