#include<iostream>
#include<bits/stdc++.h>

using namespace std;
using ll=long long;

/*
10
2 4 2 2 8 4 8 2 6 2

YES
1 8 1
*/

void test_case(){
    int n;
    cin>>n;
    vector<int>a(n),pmax(n),smax(n),pmind(n,-1),smind(n,n);
    unordered_map<ll,ll>fst,lst;
    int maxi=0, mini=1e9+2, mini_ind=-1;
    for(int i=0; i<n; i++){
        cin>>a[i];
        maxi=max(maxi,a[i]);
        pmax[i]=maxi;
        if(fst.find(a[i])!=fst.end()){
            lst[a[i]]=i;
        }else{
            fst[a[i]]=i;
        }
    }
    maxi=0, mini=1e9+3, mini_ind=n;
    for(int i=n-1; i>=0; i--){
        maxi=max(maxi,a[i]);
        smax[i]=maxi;
    }

    stack<pair<int,int>>stk,stk2;
    for(int i=0; i<n; i++){
        if(stk.empty()){
            stk.push(make_pair(a[i],i));
            continue;
        }
        while(!stk.empty() && stk.top().first>=a[i]){
            if(stk.top().first==a[i] && fst[a[i]]==stk.top().second)break;
            stk.pop();
        }
        if(!stk.empty())pmind[i]=stk.top().second;
        stk.push(make_pair(a[i],i));
    }
    for(int i=n-1; i>=0; i--){
        if(stk2.empty()){
            stk2.push(make_pair(a[i],i));
            continue;
        }
        while(!stk2.empty() && stk2.top().first>=a[i]){
            if(stk2.top().first==a[i] && lst[a[i]]==stk2.top().second)break;
            stk2.pop();
        }
        if(!stk2.empty())smind[i]=stk2.top().second;
        stk2.push(make_pair(a[i],i));
    }

    for(int i=1; i<n-1; i++){
        if(fst[a[i]]==i || lst[a[i]]==i)continue;
        int minl=pmind[i], minr=smind[i];
        int maxtl= minl!=-1 ? pmax[minl] : 0, maxtr= minr!=n ? smax[minr] : 0;
        if(maxtl == a[i] && maxtr == a[i]){
            cout<<"YES"<<endl;
            cout<<minl+1<<" "<<minr-minl-1<<" "<<n-minr<<endl;
            return;
        }
    }
    cout<<"NO"<<endl;
    
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t;
    // t=1;
    cin>>t;
    while(t--){
        test_case();
    }

    return 0;
}