#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowBit(x) ((x)&(-x))
#define rep(i,a,n) for (ll i=a;i<=n;i++)
#define per(i,a,n) for (ll i=n;i>=a;i--)
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((ll)(x).size())
typedef vector<ll> VI;
typedef pair<ll,ll> PII;
const ll mod=1e17+7;
const ll N=2e5+5;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
ll powmod(ll a,ll b){ll ans=1;a%=mod;while(b>0)
{if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans%mod;}
ll readn(){ll sum=0,f=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){sum=sum*10+(ch-'0');
ch=getchar();}return sum*f;}




ll _,n,s[N];
map<ll,vector<ll> >mp;
void add(ll x,ll k){
    for(ll i=x;i<N;i+=i&-i){
        s[i]+=k;
    }
}
ll query(ll x){
    ll res=0;
    for(ll i=x;i>0;i-=i&-i){
        res+=s[i];
    }return res;
}
void sol(){
    n=readn();mp.clear();
    rep(i,1,n){
        ll x;x=readn();
        mp[-x].pb(i);
    }
    if(mp.begin()->se.size()>=3){
        printf("YES\n%lld 1 %lld\n",mp.begin()->se[1]-1,n-mp.begin()->se[1]);
        return;
    }
    ll l=n,r=1;
    for(auto it:mp){
        for(auto ii:it.se)add(ii,1);
        if(l<=r){
            ll ok=0;
            for(auto ii:it.se){
                if(ii>=l&&ii<=r)ok=1;
                if(ii==l-1&&ii!=it.se[0]){
                    l--;ok=1;break;
                }
                if(ii==r+1&&ii!=it.se.back()){
                    r++;ok=1;break;
                }
            }
            if(ok&&query(r)-query(l-1)==r-l+1&&it.se[0]<l&&it.se.back()>r){
                printf("YES\n%lld %lld %lld\n",l-1,r-l+1,n-r);
                for(ll i=1;i<=n;i++){
                    add(i,-query(i)+query(i-1));
                }
                return;
            }
        }
        for(auto ii:it.se)l=min(l,ii),r=max(r,ii);
    }
    printf("NO\n");
    for(ll i=1;i<=n;i++)add(i,-query(i)+query(i-1));
}
int main(){
    _=readn();
    while(_--)sol();
}