#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 200005
using namespace std;
int sum[maxn<<2];
int col[maxn<<2];
struct node
{
int id,x;
}a[maxn];
int num[maxn/2][2];
bool cmp(node X,node Y)
{
return X.x<Y.x;
}
void down(int rt)
{
if(col[rt]!=0)
{
col[rt<<1]+=col[rt];
sum[rt<<1]+=col[rt];
col[rt<<1|1]+=col[rt];
sum[rt<<1|1]+=col[rt];
col[rt]=0;
}
}
void up(int rt)
{
sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
}
void update(int L,int R,int rt,int a,int b)
{
if(a<=L&&b>=R)
{
col[rt]+=1;
sum[rt]+=1;
return;
}
down(rt);
int m=(L+R)/2;
if(a<=m)update(L,m,rt<<1,a,b);
if(b>m) update(m+1,R,rt<<1|1,a,b);
up(rt);
}
int main()
{
int T,N,i,j,temp,sum1;
scanf("%d",&T);
while(T--)
{
memset(sum,0,sizeof(sum));
memset(col,0,sizeof(col));
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d %d",&num[i][0],&num[i][1]);
a[2*i].x=num[i][0];
a[2*i].id=-i-1;
a[2*i+1].x=num[i][1];
a[2*i+1].id=i+1;
}
sort(a,a+2*N,cmp);
sum1=a[0].x;
temp=1;
for(i=0;i<2*N;i++)
{
if(sum1!=a[i].x)
{
temp++;
sum1=a[i].x;
}
if(a[i].id<0)
{
num[-a[i].id-1][0]=temp;
}
else
{
num[a[i].id-1][1]=temp;
}
}
for(i=0;i<N;i++)
{
update(1,temp,1,num[i][0],num[i][1]);
}
printf("%d\n",sum[1]);
}
return 0;
}
区间最大值-杭电5124
最新推荐文章于 2025-06-15 23:18:26 发布