
思路:寻找区间内只有1种奶牛或者2种奶牛数量相等的最长区间,将两种奶奶记作1,-1数量相等则区间和为0
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define x first
#define y second
using namespace std;
const int N = 100010;
typedef pair<int, int> PII;
PII q[N];
int main()
{
int n;
scanf("%d", &n);
for(int i=1;i<=n;i++){
int x;
char str[2];
scanf("%d%s", &x, str);
if(*str=='G') q[i]={x,1};
else q[i]={x,-1};
}
sort(q+1,q+1+n);
unordered_map<int,int> hash;
int res=0,sum=0,last;
for(int i=1;i<=n;i++){
if(!hash.count(sum)) hash[sum]=q[i].x;
sum+=q[i].y;
if(hash.count(sum)) res=max(res,q[i].x-hash[sum]);
if(i==1||q[i].y!=q[i-1].y) last=q[i].x;
res=max(res,q[i].x-last);
}
printf("%d",res);
return 0;
}