#include #include #include using namespace std; #define MAXN 1011 typedef pair pii; //a means ans //x -> [l, r] int To(int a[], int& n, int x, int l, int r) { if (l <= x && x <= r) { a[n++] = x; return 0; } else if (x < l) { a[n++] = l; if (((l - x) & 1) && l < r) { a[n++] = l + 1; } return (l - x + 1) >> 1; } else { //x > r a[n++] = r; if (((x - r) & 1) && l < r) { a[n++] = r - 1; } return (x - r + 1) >> 1; } } int Solve(int to[], int& len, int from[], int n, int l, int r) { int ans = 0x3f3f3f3f; len = 0; for (int i = 0; i < n; ++i) { static int now[100]; int nl = 0; int t = To(now, nl, from[i], l, r); if (t > ans) continue; if (t < ans) { ans = t; len = 0; } while (nl) { --nl; to[len++] = now[nl]; } } return ans; } pii Cross(pii x, pii y) { return make_pair(max(x.first, y.first), min(x.second, y.second)); } int main() { int T; static int a[MAXN], b[MAXN]; static int base[2][MAXN * 4]; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d%d", a+i, b+i); } int *from = base[0], *to = base[1]; pii ori(1, 1000000); int i; for (i = 0; i < n; ++i) { auto now(Cross(make_pair(a[i], b[i]), ori)); if (now.first > now.second) break; ori = now; } int len = 0; from[len++] = ori.first; from[len++] = ori.second; if (ori.first < ori.second) { from[len++] = ori.second - 1; from[len++] = ori.first + 1; } int ans = 0; for (; i < n; ++i) { sort(from, from + len); len = unique(from, from + len) - from; int tolen; ans += Solve(to, tolen, from, len, a[i], b[i]); swap(to, from); swap(len, tolen); } printf("%d\n", ans); } return 0; }