/*
lines
Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 590 Accepted Submission(s): 277
Problem Description
John has several lines. The lines are covered on the X axis. Let A is a point which is covered by the most lines. John wants to know how many lines cover A.
Input
The first line contains a single integer T(1≤T≤100)(the data for N>100 less than 11 cases),indicating the number of test cases.
Each test case begins with an integer N(1≤N≤105),indicating the number of lines.
Next N lines contains two integers Xi and Yi(1≤Xi≤Yi≤109),describing a line.
Output
For each case, output an integer means how many lines cover A.
Sample Input
2
5
1 2
2 2
2 4
3 4
5 1000
5
1 1
2 2
3 3
4 4
5 5
Sample Output
3
1
Source
BestCoder Round #20
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int comp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int a[100005],b[100005];
int main()
{
int cases,j,i,temp_j,temp_i,p,cnt,max,n;
scanf("%d",&cases);
while(cases--)
{
memset(a,-1,sizeof(a));
memset(b,-1,sizeof(b));
max=-1,cnt=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
qsort(a,100005,sizeof(int),comp);
qsort(b,100005,sizeof(int),comp);
for(j=0;;j++){if(b[j]!=-1) break;}
temp_j=j;
for(i=0;i<100005;i++)
{
if(a[i]==-1) continue;
if(a[i]>b[j])
{
cnt--;
j++;
temp_j=j;
break;
}
else
{
p=1;
cnt++;temp_i=i;
if(cnt>max) max=cnt;
while(p)
{
if(a[++temp_i]==a[i]){break;}
while(1)
{
if(b[temp_j++]==a[i]) {cnt--;j++;temp_j=j;}
else {p=0;temp_j=j;break;}
}
}
}
}
printf("%d\n",max);
}
return 0;
}
//这题是一次bc的b题,下面是大仙的代码,和我的想法一样, 不过他用结构体标记左右端点,再混合排序,而我对结构体不熟悉
//没想到用这个所以就用a,b数组讨论成数组的形式,思维情况比较复杂,wa了5,6次。最后还是ac了 ,时间和大仙的那个差不多,差了100ms左右。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct line{
int x;
int flag;
}L[200010];
bool cmp(line a,line b){
if(a.x<b.x||(a.x==b.x&&a.flag<b.flag)) return 1;
return 0;
}
int main()
{
int _,n,all,a,b;
scanf("%d",&_); //用_作为循环变量,值得学习。
while(_--){
scanf("%d",&n);
all=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&a,&b);
L[all].x=a;
L[all++].flag=0;
L[all].x=b;
L[all++].flag=1;
}
sort(L,L+all,cmp);
int total=0;
int ma=0;
for(int i=0;i<all;i++){
if(L[i].flag==0)
total++;
else total--;
if(total>ma)
ma=total;
}
printf("%d\n",ma);
}
return 0;
}
//大仙的ac的代码。