#include<bits/stdc++.h>
#define maxn 200005
using namespace std;
int n,T,Q[maxn],a[maxn],L[maxn],R[maxn],Mx[maxn][2];
inline int read(){
	int ret=0;char ch=getchar();
	while (ch<'0'||ch>'9') ch=getchar();
	while (ch<='9'&&ch>='0') ret=ret*10+ch-'0',ch=getchar();
	return ret;
}
int main(){
	T=read();
	while (T--){
		n=read();
		for (int i=1;i<=n;i++) a[i]=read(),Mx[i][0]=Mx[i][1]=0,L[i]=R[i]=0;
		Mx[n+1][1]=0;
		for (int i=1;i<=n;i++) Mx[i][0]=max(Mx[i-1][0],a[i]);
		for (int i=n;i;i--) Mx[i][1]=max(Mx[i+1][1],a[i]);
		int top=0;
		for (int i=1;i<=n;i++){
			if (!top) Q[++top]=i;
			else{
				while (a[i]<a[Q[top]]) R[Q[top--]]=i;
				Q[++top]=i;
			}
		}
		top=0;
		for (int i=n;i;i--){
			if (!top) Q[++top]=i;
			else{
				while (a[i]<a[Q[top]]) L[Q[top--]]=i;
				Q[++top]=i;
			}
		}
		bool flg=0;
		for (int i=2;i<n;i++){
			int l=max(1,L[i]),r=i-1,now1=0,now2=0;
			while (l<=r){
				int mid=l+r>>1;
				if (Mx[mid][0]==a[i]){now1=mid;break;}
				if (Mx[mid][0]>a[i]) r=mid-1;else l=mid+1;
			}
			if (!now1) continue;
			l=i+1,r=R[i];if (!r) r=n;
			while (l<=r){
				int mid=l+r>>1;
				if (Mx[mid][1]==a[i]){now2=mid;break;}
				if (Mx[mid][1]>a[i]) l=mid+1;else r=mid-1;
			}
			if (now2){printf("YES\n%d %d %d\n",now1,now2-now1-1,n-now2+1);flg=1;break;}
		}
		if (!flg) puts("NO");
	}
	return 0;
}
