二分
和二分没有半毛钱关系,题目大意有点不好描述。
题解:数的范围在int范围,而且有负数,不能用数组,用map存储,前缀和代表有多少个最多有多少种满足描述,取最大的前缀和。
找重叠区间最多的个数。输出.时,a点加一。输出-时,负无穷到a-1加一。输出+时,a+1到正无穷加一。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5;
const int inf=INT_MAX;
map<int,int>m;
int main(){
int n,a;char c;cin>>n;
for(int i=0;i<n;i++){
scanf("%d %c",&a,&c);
if(c=='.'){
m[a]++;m[a+1]--;///a点加一
}
else if(c=='+'){
m[-inf]++;m[a]--;///负无穷到a-1加一
}
else {
m[a+1]++;///a+1到正无穷加一
}
}
map<int,int>::iterator it;
int ans=-inf;int t=0;
for(it=m.begin();it!=m.end();it++){
t+=it->second;
ans=max(t,ans);
}
cout<<ans<<endl;
return 0;
}