#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#define N 200002
using namespace std;
struct node
{
int l,r;
int lz;
} q[4*N];
struct Line
{
int x,y;
} line[2*N];
int X[2*N],hash[2*N],hh[2*N];
int tt;
void build(int l,int r,int rt)
{
q[rt].l=l;
q[rt].r=r;
q[rt].lz=0;
if(l==r)
return ;
build(l,(l+r)/2,rt*2);
build((l+r)/2+1,r,rt*2+1);
return ;
}
void pushdown(int rt)
{
if(q[rt].lz)
{
q[rt*2].lz=q[rt].lz;
q[rt*2+1].lz=q[rt].lz;
q[rt].lz=0;
}
}
void update(int lf,int rf,int l,int r,int rt,int key)
{
if(lf<=l&&rf>=r)
{
q[rt].lz=key;
return ;
}
pushdown(rt);
if(lf<=(l+r)/2) update(lf,rf,l,(l+r)/2,rt*2,key);
if(rf>(l+r)/2) update(lf,rf,(l+r)/2+1,r,rt*2+1,key);
return ;
}
void query(int l,int r,int rt)
{
if(l==r)
{
hh[q[rt].lz]=1;
printf("dsfd");
return ;
}
pushdown(rt);
query(l,(l+r)/2,rt*2);
query((l+r)/2+1,r,rt*2+1);
return ;
}
int main()
{
int T,n;
cin>>T;
while(T--)
{
tt=0;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>line[i].x>>line[i].y;
X[tt++]=line[i].x;
X[tt++]=line[i].y;
}
sort(X,X+tt);
int sum=unique(X,X+tt)-X;
build(1,sum,1);
for(int i=0; i<sum; i++) //离散化
{
hash[X[i]]=i+1;
}
for(int i=1; i<=n; i++)
{
update(hash[line[i-1].x],hash[line[i-1].y],1,sum,1,i);
}
memset(hh,0,sizeof(hh));
query(1,sum,1);
int summ=0;
for(int i=1;i<=sum;i++)
{
if(hh[i])
summ++;
}
printf("%d\n",summ);
}
return 0;
}
fdfsfds
时间: 2024-10-11 00:50:51