#include<bits/stdc++.h>
using namespace std;
#define ll long long int

ll a[200005];
ll st[1000005];
ll Mxr[200005];

void build(ll node,ll l,ll r){
    if(l==r){
        st[node]=a[l];
        return;
    }
    ll mid=(l+r)/2;
    build(2*node,l,mid);
    build(2*node+1,mid+1,r);
    st[node]=min(st[2*node],st[2*node+1]);
}

ll query(ll node,ll l,ll r,ll ql,ll qr){
    if(r<ql || l>qr || l>r){
        return 1e10;
    }
    if(l>=ql && r<=qr){
        return st[node];
    }
    ll mid=(l+r)/2;
    ll res1=query(2*node,l,mid,ql,qr);
    ll res2=query(2*node+1,mid+1,r,ql,qr);
    return min(res1,res2); 
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    
    ll t;
    cin>>t;
    
    while(t--){
        ll n;
        cin>>n;
        
        map<ll,ll> cnt;
        for(ll i=1;i<=n;i++){
            cin>>a[i];
            cnt[a[i]]++;
        }
        build(1,1,n);
        
        ll Maxl=0;
        ll Maxr=-1;
        ll prev1=n+1;
        ll prev2=n+1;
        ll r=n;
        ll ans1=0;
        ll ans2=0;
        ll ans3=0;
        for(ll i=1;i<=n-2;i++){
            if(r==i && Mxr[r+2]<Maxl){
                break;
            }
            if(r==i){
                r=i+1;
            }
            Maxl=max(Maxl,a[i]);
            cnt[a[i]]--;
            
            while(r>=i+2  && a[r]<=Maxl){
                if(a[r]==Maxl){
                    prev2=prev1;
                    prev1=r;
                }
                Maxr=max(Maxr,a[r]);
                Mxr[r]=Maxr;
                r--;
            }

            //cout<<i<<" "<<r<<"\n";
            if(prev1==n+1 || a[prev1]!=Maxl){
                continue;
            }
            //cout<<i<<" "<<r<<"\n";
            ll z=query(1,1,n,i+1,r);
            
            if(z<Maxl){
                continue;
            }
            //cout<<i<<" "<<r<<"\n";
            if(z>Maxl){
                if(prev2==n+1 || a[prev2]!=Maxl){
                    continue;
                }
                if(i>=1 && prev1-i>=1 && n-prev1>=1 && query(1,1,n,i+1,prev1)==Maxl){
                    ans1=i;
                    ans2=prev1-i;
                    ans3=n-ans1-ans2;
                    break;
                }
            }
            //cout<<i<<" "<<r<<"\n";
            if(z==Maxl){
                if(i>=1 && r-i>=1 && n-r>=1){
                    ans1=i;
                    ans2=r-i;
                    ans3=n-ans1-ans2;
                    break;
                }
            }
            
        }
        
        if(ans1!=0){
            cout<<"YES"<<"\n";
            cout<<ans1<<" "<<ans2<<" "<<ans3<<"\n";
        }
        else{
            cout<<"NO"<<"\n";
        }
    }
}










