#include <cstdio> #include <cstring> #include <iostream> #include <vector> #include <algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define INF 1000001000 const int maxn = 51010; int cover[maxn<<2]; void build(int l,int r,int rt){ cover[rt]=0; if(l==r) return ; int m=(l+r)>>1; build(lson); build(rson); } void pushdown(int rt){ if(cover[rt]){ cover[rt<<1]=cover[rt<<1|1]=cover[rt]; cover[rt]=0; } } int ql,qr,val; void update(int l,int r,int rt){ if(ql<=l&&r<=qr){ cover[rt]=val; return ; } pushdown(rt); int m=(l+r)>>1; if(ql<=m) update(lson); if(qr> m) update(rson); } int vis[maxn+1]; int ans; void query(int l,int r,int rt){ if(cover[rt]){ if(!vis[cover[rt]]) {ans++; vis[cover[rt] ]=1; } return ; } if(l==r) return ; int m=(l+r)>>1; if(ql<=m) query(lson); if(qr> m) query(rson); } struct Seg{ int x,y; Seg(int xx=0,int yy=0):x(xx),y(yy){} }seg[10001]; int a[maxn],kk=0,m; int b[maxn]; int find(int value){ int p=lower_bound(a,a+m,value) - a; return b[p]; } int lim=50001; int main() { int T,Q; scanf("%d",&T); while(T--){ scanf("%d",&Q); //int x,y; kk=0; for(int i=1;i<=Q;i++){ scanf("%d %d",&seg[i].x,&seg[i].y); a[kk++]=seg[i].x; a[kk++]=seg[i].y; } sort(a,a+kk); m=unique(a,a+kk) - a; int tt=1; for(int i=0;i<m;i++){ b[i]=tt++; if(i&&a[i]>a[i-1]+1) b[i]=tt++; } build(1,lim,1); int temp=1; for(int i=1;i<=Q;i++){ ql=find(seg[i].x); qr=find(seg[i].y); val=temp++; update(1,lim,1); } ans=0; memset(vis,0,sizeof(vis)); ql=1; qr=lim; query(1,lim,1); printf("%d\n",ans); } return 0; }