思路

说是二分
然而这个题和二分没有任何的关系
可以转换下思路
等价的意思, 是根据教练所说的信息, 枚举所有的数字, 找到满足条件最多的那个就行
当然不能从 (-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;
}