#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,i,j,ii,jj,zx,xc,tes,t,f[200009],rmq[200009][19],k[200009],mx[200009],mx2[200009],lef,rig,mid;
map <int, vector <int> > m;
vector <int>::iterator it;
int getmin(int q, int w){
	int qw=w-q+1;
	return min(rmq[q][k[qw]],rmq[w-(1<<k[qw])+1][k[qw]]);
}
int main(){
	ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>tes;
	for(t=1; t<=tes; t++){
		cin>>a;
		m.clear();
		for(i=1; i<=a; i++){
			cin>>f[i];
			m[f[i]].push_back(i);
		}
		k[0]=0;k[1]=0;k[2]=0;
		mx[i-1]=0;mx2[a+1]=0;
		for(i=1; i<=a; i++) mx[i]=max(mx[i-1],f[i]);
		for(i=a; i>=1; i--) mx2[i]=max(mx2[i+1],f[i]);
		for(i=3; i<=a; i++){
			k[i]=k[i-1];
			if((1<<(k[i]+1))<i) k[i]++;
		}
		for(j=0; j<=17; j++){
			for(i=1; i<=a; i++){
				if(i+(1<<j)-1>a) break;
				if(j==0){
					rmq[i][j]=f[i];
				}else{
					rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
				}
			}
		}
		bool bl=0;
		for(i=1; i<=a-2; i++){
			if(m[mx[i]].size()<2){
				continue;
			}
			it=lower_bound(m[mx[i]].begin(),m[mx[i]].end(),i+1);
			if(m[mx[i]].end()-it<=1) continue;
			lef=i;rig=a+1;
			e=-1;
			while(1){
				if(lef+1>=rig) break;
				mid=(lef+rig)/2;
				if(mx2[mid]<=mx[i]){
					e=mid;
					rig=mid;
				}else{
					lef=mid;
				}
			}
			/*if(t==5){
				cout<<(*it)<<" l "<<e<<endl;
			}*/
			if(e==-1||mx2[e]!=mx[i]) continue;
			e=max(e-1,(*it));
			zx=getmin(i+1,e);
			if(zx==mx[i]){
				cout<<"YES"<<endl;
				cout<<i<<" "<<e-i<<" "<<a-e<<endl;
				bl=1;
				break;
			}
		}
		if(bl==0){
			cout<<"NO"<<endl;
		}
	}
	return 0;
}