『题解』Codeforces 1424G Years

Solution

看到题目,首先想到的就是模拟(可能是我模拟做多了),再看到数据范围 \(1 \le b_i \le d_i \le 10^9\),立马想到用 map

具体怎么实现呢,我们用一个 map \(p\) 来存储每年活着的人,也就是说,对于第 \(i\) 个人,我们需要将 \(p_{b_i} + 1\),然后将 \(p_{d_i} - 1\),这样 \(p_i\) 就是第 \(i\) 年的净人数,即第 \(i\) 年出生的人数 \(-\)\(i\) 年死亡的人数。

最后对 \(p\) 中的每个元素进行枚举,如果枚举到第 \(i\) 个元素,则若对于 \(x \in \{k \in N_+ | \ k < i\}\) 的所有 \(p_x\) 之和大于当前最大解,则记录答案(位置和人数)。

Code

#include <bits/stdc++.h>
using namespace std;

int n, ans, pos, maxans;
map <int, int> live;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i ++)
    {
        int x, y;
        cin >> x >> y;
        live[x] ++;
        live[y] --;
    }

    for (auto x : live)
    {
        ans += x.second;
        if (ans > maxans)
        {
            pos = x.first;
            maxans = ans;
        }
    }
    cout << pos << " " << maxans;
    return 0;
}
posted @ 2023-03-11 21:12  Clyfort  阅读(26)  评论(0编辑  收藏  举报