/* * POJ_2528.cpp * * Created on: 2013年11月25日 * Author: Administrator */ #include <iostream> #include <cstdio> #include <algorithm> #define maxn 10010 #define Fup(i, s, t) for (int i = s; i <= t; i ++) using namespace std; bool tab[maxn]; int l[maxn], r[maxn], x[maxn * 3], num[maxn * 3], tree[maxn * 12]; int c, n; int binary_search(int sum) { int l = 1, r = 3 * n; while (r >= l) { int mid = (l + r) / 2; if (x[mid] <= sum) l = mid + 1; else r = mid - 1; } return num[r]; } void update(int i) { if (!tree[i]) return; tree[i + i] = tree[i + i + 1] = tree[i]; tree[i] = 0; } void change(int tl, int tr, int l, int r, int i, int co) { if (tr < l || tl > r) return; if (tl <= l && r <= tr) { tree[i] = co; return; } update(i); int mid = (l + r) / 2; change(tl, tr, l, mid, i + i, co); change(tl, tr, mid + 1, r, i + i + 1, co); } int require(int l, int r, int i) { int mid = (l + r) / 2; if (tree[i]) { if (!tab[tree[i]]) { tab[tree[i]] = 1; return 1; } return 0; } if (l == r) return 0; return require(l, mid, i + i) + require(mid + 1, r, i + i + 1); } void init() { scanf("%d", &n); Fup(i, 1, n) { scanf("%d%d", l + i, r + i); x[i + i + i - 2] = l[i]; x[i + i + i - 1] = r[i]; x[i + i + i] = (l[i] + r[i]) / 2; } sort(x + 1, x + 3 * n + 1); memset(num, 0, sizeof(num)); Fup(i, 1, 3 * n) { num[i] = num[i - 1]; if (x[i] != x[i - 1]) num[i]++; } Fup(i, 1, n) { l[i] = binary_search(l[i]); r[i] = binary_search(r[i]); } } void solve(){ memset(tree,0,sizeof(tree)); memset(tab,0,sizeof(tab)); int i; for(i = 1 ; i <= n ; ++i){ change(l[i],r[i],1,3*n,1,i); } int ans = require(1,3*n,1); printf("%d\n",ans); } int main(){ scanf("%d",&c); while(c--){ init(); solve(); } return 0; }