唉,被题目坑了。还以为题目好心提醒是二分。比赛时一直找二分条件,mmm一直找不出。(我真是个憨憨)
最后几分钟,突然搞明白,不用二分。:-(;看题目,首先暴力枚举,怎么暴力??对于每个int型范围内的整数,都有可能。那么枚举每个数,判断最多符合条件的。这是最初的思路,当然暴力过不了;
想怎么优化,我们想知道对于每个数,其符合条件的个数k;
例如:
5 . 则整数5 +1
6 + 则整数大于6的所有数 +1
5 . 5 +1
8 - 小于8的所有数+1
序列上操作,那么差分可以满足;(入门课里讲了)

#include<bits/stdc++.h>
using namespace std;
const int inf=INT_MAX;//int型数据最大值,因为是对每个数进行统计
int n,a[1000000],max1=0,sum[10000000];
map<int,int> M;//数据过大,数组存不下,并且数据还可为负
char s[1000000];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) 
    {
        cin>>a[i]>>s[i];
    }
    for(int i=1;i<=n;i++)
    {
        if(s[i]=='.') {M[a[i]]++,M[a[i]+1]--;}
        if(s[i]=='+'){M[a[i]]--,M[-inf]++;}
        if(s[i]=='-'){M[inf]--,M[a[i]+1]++;}
    }
    int ans=-inf,h=0;
    for(auto x:M)
    {
        h+=x.second;
        ans=max(h,ans);
    }
    cout<<ans;
}