思路
说是二分
然而这个题和二分没有任何的关系
可以转换下思路
等价的意思, 是根据教练所说的信息, 枚举所有的数字, 找到满足条件最多的那个就行
当然不能从 (-inf , +inf ) 枚举, 根据教练所说的, 再这些区间端点枚举就好
用map <int ,int > 做差分数组就好, 中间的都是0 , 不加就行
ac代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int inf = INT_MAX;
map<int, int> dif;
int main(){
int n;
cin >> n;
while (n--){
int a;
char ch;
cin >> a >> ch;
if (ch == '-') { // (a , +inf] == [a+1 , + inf]
dif[inf]--;
dif[a + 1]++;
}else if (ch == '+') {// [-inf , a) == [-inf] , a-1]
dif[a]--;
dif[-inf]++;
}else{ // [a,a]
dif[a]++;
dif[a + 1]--;
}
}int ans = -inf, s = 0;
for (auto x : dif){
s += x.second;
ans = max(ans, s);
}cout << ans;
return 0;
}