题目
思路
本质是差分,和二分无关。裁判说数大了,那么裁判说对的取值范围是(-∞,a],裁判说数小了,那么裁判说对的取值范围是[a,+∞),裁判说数一样,那么裁判说对的取值范围是[a,a],求最大有多少个区间重叠。
代码
#include<iostream>
#include<map>
#include<limits.h>
using namespace std;
const int inf=INT_MAX;
int n,a[1000000];
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;
}
209

被折叠的 条评论
为什么被折叠?



