int raw = 0, mx = m/6; for (int i = 6; i <= m; i++) { if (!diff(i)) raw++; } vector<int> c(mx+2);
for (int i = 1, l, r; i <= n; i++) { cin >> l >> r; if (l > mx) continue; c[l]++; c[min(mx, r)+1]--; }
int mxpeople = 0; for (int i = 1; i <= mx; i++) mxpeople = max(mxpeople, c[i] += c[i-1]); if (mxpeople == 0) return0;
auto check = [&](int mid) -> pair<int, int> { vector<int> dp(m+1); vector<int> cnt(m+1); for (int i = 6; i <= m; i++) { int cost = diff(i) - mid; if (dp[i-6] + cost <= dp[i-1]) { dp[i] = dp[i-6] + cost; cnt[i] = cnt[i-6] + 1; } else { dp[i] = dp[i-1]; cnt[i] = cnt[i-1]; } } return {dp[m], cnt[m]}; };
auto wqs = [&](int target) { int l = -m-1, r = m+1; int b, x; while (l < r) { int mid = (l+r) >> 1; tie(b, x) = check(mid); if (x >= target) r = mid; else l = mid + 1; } // 注意最后可能并不以 check(mid) 结束, 所以需要重新调用一下 tie(b, x) = check(r); return r * target + b; };
int ans = INF; for (int i = 1; i <= mx; i++) { if (c[i] != mxpeople) continue; if (i <= raw) ans = min(ans, raw - i); else { ans = min(ans, wqs(i)); break; } }
return ans; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T; cin >> T; while (T--) cout << solve() << '\n'; return0; }