#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;

const int max_n = 2e5+100;
const int max_A = 5e5+10;
const int Mod = 1e9+7;
const int inf = 1e18; 
const int lim = 3e3+20;

int n,a[max_n],l[max_n],r[max_n];

void fill(){
	stack<int> S;
	for(int i=0;i<n;i++){
		while(S.size()>0 && a[S.top()]>=a[i]){
			S.pop();
		}
		if(S.size()==0) l[i]=-1;
		else l[i]=S.top();
		S.push(i);
	}

	while(S.size()>0) S.pop();

	for(int i=n-1;i>=0;i--){
		while(S.size()>0 && a[S.top()]>=a[i]){
			S.pop();
		}
		if(S.size()==0) r[i]=n;
		else r[i]=S.top();
		S.push(i);
	}
	return;
}

signed main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int T;cin>>T;
	while(T--){
		cin>>n;
		map<int,vector<int> > M;
		for(int i=0;i<n;i++) {
			cin>>a[i];
			M[a[i]].push_back(i);
		}
		for(auto& x:M) reverse(x.second.begin(),x.second.end());
		fill();

		int suf_max[n];
		suf_max[n-1]=a[n-1];
		for(int i=n-2;i>=0;i--) suf_max[i]=max(suf_max[i+1],a[i]);

		bool ok=0;
		int maxi=-1;
		for(int i=0;i<n;i++){
			maxi=max(maxi,a[i]);
			M[a[i]].pop_back();

			int t = maxi;

			if(M[t].size()>=2){
				int k1 = M[t].back();
				int k2 = M[t][0];

				if(l[k1]<=i){

					int idx = r[k1]-1;
					if(idx+1>0 && suf_max[idx+1]==t){
						//yes
						cout<<"YES"<<endl;
						cout<<i+1<<" "<<(idx+1-(i+1))<<" "<<n-(idx+1)<<endl;
						ok=1;
						break;
					}else{
						if(a[idx]==t){
							idx--;
							if(idx-k1+1>0 && suf_max[idx+1]==t){
								//yes
								cout<<"YES"<<endl;
								cout<<i+1<<" "<<(idx+1-(i+1))<<" "<<n-(idx+1)<<endl;
								ok=1;
								break;
							}
						}
					}
				}
			}
		}

		if(!ok) cout<<"NO"<<endl;
	}
}