#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(a) a.begin(), a.end()
#define ff(i,a,b) for(int i=a;i<=b;i++)
#define fb(i,b,a) for(int i=b;i>=a;i--)

using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 200005;
const int inf = 1e9 + 5;

int n;
int niz[maxn];

ll lg[maxn];
ll sp[maxn][20][2];
void napravi(){
    for(int i=2;i<=n;i++)lg[i] = lg[i/2] + 1;
    for(int i=1;i<=n;i++){
        sp[i][0][0] = niz[i];
        sp[i][0][1] = niz[i];
    }
    for(int j=1;j<20;j++){
        for(int i=1;i+(1<<j)-1<=n;i++){
            sp[i][j][0] = min(sp[i][j-1][0], sp[i+(1<<(j-1))][j-1][0]);
            sp[i][j][1] = max(sp[i][j-1][1], sp[i+(1<<(j-1))][j-1][1]);
        }
    }
}
ll rmaxq(int l, int r){
    if(l > r)return 0;
    int x = lg[r-l+1];
    return max(sp[l][x][1], sp[r-(1<<x)+1][x][1]);
}
ll rminq(int l, int r){
    if(l > r)return 0;
    int x = lg[r-l+1];
    return min(sp[l][x][0], sp[r-(1<<x)+1][x][0]);
}

// min
int nadji1(int L, int R, int x){
    int l = L, r = R, ans = 0;
    while(l <= r){
        int mid = (l + r) / 2;
        if(rminq(L, mid) <= x){
            ans = mid;
            r = mid - 1;
        }
        else l = mid + 1;
    }
    return ans;
}

int nadji2(int L, int R, int x){
    int l = L, r = R, ans = 0;
    while(l <= r){
        int mid = (l + r) / 2;
        if(rminq(L, mid) >= x){
            ans = mid;
            l = mid + 1;
        }
        else r = mid - 1;
    }
    return ans;
}

void Solve(){
    cin >> n;
    ff(i,1,n)cin >> niz[i];
    napravi();
    int najv = 0;
    ff(i,1,n - 2){
        najv = max(najv, niz[i]);
        int dole = nadji1(i + 1, n, najv);
        if(rminq(i + 1, dole) != najv)continue;
        int gore = nadji2(i + 1, n, najv);
        if(rmaxq(dole + 1, n) == najv){
            cout << "YES" << endl;
            cout << i << " " << dole - (i + 1) + 1 << " " << n - i - (dole - (i + 1) + 1) <<  endl;
            return;
        }
        if(rmaxq(gore + 1, n) == najv){
            cout << "YES" << endl;
            cout << i << " " << gore - (i + 1) + 1 << " " << n - i - (gore - (i + 1) + 1) << endl;
            return;
        }
        int l = dole + 1, r = gore, ans = 0;
        while(l <= r){
            int mid = (l + r) / 2;
            if(rmaxq(mid, n) >= najv){
                ans = mid;
                l = mid + 1;
            }
            else r = mid - 1;
        }
        if(ans == 0)continue;
        if(rmaxq(ans, n) == najv){
            cout << "YES" << endl;
            cout << i << " " << ans - i - 1 << " " << n - i - (ans - i - 1) << endl;
            return;
        }
    }
    cout << "NO" << endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cout.tie(nullptr);
    cin.tie(nullptr);
    int t = 1;
    cin >> t;
    while(t--)Solve();
    return 0;
}
/**

11
1 2 3 3 3 4 4 3 4 2 1

// probati bojenje sahovski ili slicno

**/
