#include <bits/stdc++.h>
using namespace std;




const int N = 19;

int mx[N][1 << N], mn[N][1 << N]; 


pair <int, int> query(int l, int r) {
    assert(l <= r);
    int p = 31 - __builtin_clz(r - l + 1);
    int a = min(mn[p][l], mn[p][r - (1 << p) + 1]);
    int b = max(mx[p][l], mx[p][r - (1 << p) + 1]);
    return make_pair(a, b);
}

void solve() {
    int n; cin >> n;
    for(int i = 1; i <= n; i++) {
        int x; cin >> x;
        mx[0][i] = mn[0][i] = x;
    }

    for(int i = 1; i < N; i++) {
        for(int j = 1; j <= n; j++) {
            mx[i][j] = max(mx[i - 1][j], mx[i - 1][j + (1 << (i - 1))]);
            mn[i][j] = min(mn[i - 1][j], mn[i - 1][j + (1 << (i - 1))]);
        }
    }
    

    for(int i = 1; i + 2 <= n; i++) {
        int x = query(1, i).second, L = -1, R = -1;

        int l = i + 1, r = n;
        while(l < r) {
            int mid = (l + r) / 2;
            if(query(i + 1, mid).first <= x) r = mid;
            else                             l = mid + 1;
        }

        if(query(i + 1, l).first != x) continue;

        L = l;

        l = i + 1, r = n;

        while(l < r) {
            int mid = (l + r + 1) / 2;
            if(query(i + 1, mid).first >= x) l = mid;
            else                             r = mid - 1;
        }

        R = r;

        l = min(L + 1, n), r = min(n, R + 1);

        while(l < r) {
            int mid = (l + r) / 2;
            if(query(mid, n).second <= x) r = mid;
            else                          l = mid + 1;
        }
        if(query(i + 1, l - 1).first == x && query(l, n).second == x) {
            cout << "YES" << "\n";
            cout << i << " " << l - i - 1 << " " << n - l + 1 << "\n";
            return;
        }

    }

    cout << "NO" << "\n";
}

int32_t main() {
    ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int test, tc = 0; cin >> test;
    while(test--) {
        solve();
    }
}