思路:
把表演的时间段想象为直线轴上的线段,统计各点的重复次数,最大值即为答案。
由于各个线段的有效信息(可能存在最大值)均在端点上。所以线性扫描的时候只扫描端点即可。
代码如下:
const int M = 105;
struct Node
{
int x, type;
bool operator < (const Node &tmp) const
{
return x<tmp.x||(x==tmp.x&&type>tmp.type);
}
}node[2*M];
int main()
{
int n, a, b;
while(scanf("%d", &n) && n)
{
int c = 0;
for(int i = 0; i < n; ++i)
{
scanf("%d%d", &a, &b);
node[c].x = a;
node[c].type = 1;
node[c+1].x = b;
node[c+1].type = -1;
c+=2;
}
sort(node, node+c);
int ans = 0, cnt = 0;
for(int i = 0; i < c; ++i)
{
cnt += node[i].type;
ans = max(ans, cnt);
}
printf("%d\n", ans);
}
return 0;
}