第二十一次csp认证
前缀和后缀思想
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
// 存储每个阈值对应的1和0的出现次数
map<int, pair<int, int>> um;
int one = 0, zero = 0;
int y, re;
for (int i = 0; i < n; i++) {
cin >> y >> re;
if (re)
++um[y].first, ++one;
else
++um[y].second;
}
// 存储每个阈值左边0的个数和包括当前阈值右边的1的个数
map<int, pair<int, int>> m;
for (auto it:um) {
m[it.first] = make_pair(one, zero);
if (it.second.first >= 1)
one -= it.second.first;
if (it.second.second >= 1)
zero += it.second.second;
}
// cout << "zero" << endl;
// for (auto it:m)
// cout << it.first << " " << it.second.second << endl;
// cout << endl;
// cout << "one" << endl;
// for (auto it:m)
// cout << it.first << " " << it.second.first << endl;
int cnt = INT_MIN, idx = INT_MIN;
// 遍历每个阈值左边0的个数和右边1的个数
for (auto it:m)
if (it.second.first + it.second.second >= cnt)
cnt = it.second.first + it.second.second, idx = it.first;
cout << idx;
return 0;
}