#include using namespace std; using ll = long long; using State = tuple; // (x, d, cnt) vector f(const vector& lis) { int n = lis.size(); set dp; dp.insert({lis[0], 0LL, 1LL}); vector res; res.push_back(1); for (int i = 1; i < n; ++i) { ll a = lis[i]; set pp = dp; // pp = copy swap(dp, pp); // dp = old copy, pp = old original ll max_cnt = 1; dp.insert({a, 0LL, 1LL}); for (const auto& [x, d, cnt] : pp) { if (x < a && a - x > d) { ll nx = a; ll nd = a - x; ll ncnt = cnt + 1; dp.insert({nx, nd, ncnt}); max_cnt = max(max_cnt, ncnt); } } res.push_back(max_cnt); } return res; } ll solve() { int N; cin >> N; vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; } vector lefts = f(A); vector revA = A; reverse(revA.begin(), revA.end()); vector rights = f(revA); reverse(rights.begin(), rights.end()); ll ans = 0; for (int i = 0; i < N; ++i) { ans = max(ans, lefts[i] + rights[i] - 1); } return ans; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) { cout << solve() << "\n"; } return 0; }