正题
大意
又一根长1000000000的棍子,开始时全是白色,进行n此染色操作,求最长的白色区域。
解题思路
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int f[20001];
int ex,ey,a[5001],b[5001],n,m,begin,end,link[20001];
char c[5001];
bool color[20001];
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++){scanf("\n%d %d %c",&a[i],&b[i],&c[i]);f[++m]=a[i];//加入区间f[++m]=b[i];}sort(f+1,f+1+m);//排序for (int i=1;i<=n;i++){int j=1;while (f[j]!=a[i]) j++;//计算开始位置int k=j+1;while (f[k]!=b[i]) k++;//计算结束位置for (;j<k;j++)//给该区间染色if (c[i]=='b') color[j]=true;else color[j]=false;}int i=1;while (i<m){begin=-1;if (!color[i])//不是白色{begin=f[i];}else{i++;continue;}i++;while (!color[i]&&i<m) i++;end=f[i];//更新结尾if (end-begin>ey-ex)//若发现更长距离{ey=end;ex=begin;}}printf("%d %d",ex,ey);
}