#include <iostream>
#include <cmath>
using namespace std;

const int N = 2e5 + 5;

int st1[N][20], st2[N][20];
int q[N];

int get_max(int l, int r) {
    int len = r - l + 1;
    int j = log(len) / log(2);
    return max(st2[l][j], st2[r - (1 << j) + 1][j]);
}

int get_min(int l, int r) {
    int len = r - l + 1;
    int j = log(len) / log(2);
    return min(st1[l][j], st1[r - (1 << j) + 1][j]);
}


void solve() {

    int n;
    cin >> n;
    for (int i = 1; i <= n; i ++) cin >> q[i], st1[i][0] = q[i], st2[i][0] = q[i];
    for (int j = 1; (1 << j) <= n; j ++) {
        for (int i = 1; i <= n; i ++) {
            if (i + (1 << j) - 1 > n) break;
            st1[i][j] = min(st1[i][j - 1], st1[i + (1 << (j - 1))][j - 1]);
            st2[i][j] = max(st2[i][j - 1], st2[i + (1 << (j - 1))][j - 1]);
        }
    }
    bool flag = false;
    for (int i = 1; i <= n - 2; i ++) {
        int target = get_max(1, i);
        int l = i + 1, r = n - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (get_min(l, mid) > target) l = mid + 1;
            else r = mid;
        }
        if (get_min(i + 1, l) != target) continue;
        int ll = l;
        l = i + 1, r = n - 1;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (get_min(l, mid) < target) r = mid - 1;
            else l = mid;
        }
        int rr = l;
        l = ll + 1, r = rr + 1;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (get_max(mid, n) < target) r = mid - 1;
            else l = mid;
        }
        if (get_max(l, n) == target) {
            cout << "YES" << '\n';
            cout << i << ' ' << l - i - 1  << ' ' << n - l  +  1 << '\n';
            flag = true;
            break;
        }
    }
    if (flag) return;
    else cout << "NO" << '\n';

}

int main() {

    int t;
    cin >> t;
    while (t --) {
        solve();
    }
    return 0;

}