『题解』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;
}