#include using namespace std; #define rep(i, a, b) for (int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; typedef vector vll; void solve() { ll n; cin >> n; vector> v(n); for (ll i = 0; i < n; i++) { cin >> v[i].first; v[i].second = i; } vector> g(n); if (n == 1) { cout << 1 << endl; return; } for (ll i = 0; i < n; i++) { if (i == 0) { if (v[i + 1] < v[i]) { g[i].push_back(i + 1); } if (v[i + 1] == v[i]) { g[i].push_back(i + 1); g[i + 1].push_back(i); } } else if (i == n - 1) { if (v[n - 2] < v[n - 1]) { g[n - 1].push_back(n - 2); } if (v[n - 2] == v[n - 1]) { g[n - 1].push_back(n - 2); g[n - 2].push_back(n - 1); } } else { if (v[i - 1] < v[i]) { g[i].push_back(i - 1); } if (v[i] > v[i + 1]) { g[i].push_back(i + 1); } if (v[i] == v[i + 1]) { g[i].push_back(i + 1); g[i + 1].push_back(i); } if (v[i + 1] == v[i]) { g[i].push_back(i + 1); g[i + 1].push_back(i); } } } sort(v.rbegin(), v.rend()); vector visited(n, 0); ll grp_index = 0; for (ll i = 0; i < n; i++) { if (visited[v[i].second]) { continue; } queue q; q.push(v[i].second); while (!q.empty()) { auto e = q.front(); q.pop(); visited[e] = 1; for (auto f : g[e]) { if (!visited[f]) { q.push(f); } } } grp_index++; } cout << grp_index << endl; } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int t; cin >> t; while (t--) solve(); }