#include <bits/stdc++.h> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; vector<long long> a(n + 1); for (int i = 1; i <= n; ++i) cin >> a[i]; // 记录每个值的首末位置 unordered_map<long long, pair<int, int>> pos; pos.reserve(n * 2); for (int i = 1; i <= n; ++i) { auto& pr = pos[a[i]]; if (pr.first == 0) pr.first = i; // 首次出现 pr.second = i; // 不断更新为最后出现 } // 收集区间 [first(v), last(v)] vector<pair<int, int>> segs; segs.reserve(pos.size()); for (auto& kv : pos) segs.push_back(kv.second); // 按左端点排序 sort(segs.begin(), segs.end()); // 贪心覆盖 [1..n] int ans = 0, i = 0, R = 0; while (R < n) { int best = R; while (i < (int)segs.size() && segs[i].first <= R + 1) { best = max(best, segs[i].second); ++i; } // 一定能推进:因为位置 R+1 属于某个值 v,其区间必以 L<=R+1 覆盖它 ++ans; R = best; } cout << ans << '\n'; } return 0; }