#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll mod=1000000007;
const int N=2e5+10;
const int inf=0x3f3f3f3f;
const double eps=1e-6;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}

int t,n,m;
int stmax[N][35],stmin[N][35];


int get(int l,int r,int flag){
    int k = log2(r - l + 1);
    if(flag) return min(stmin[l][k],stmin[r - (1 << k) + 1][k]);
    else return max(stmax[l][k],stmax[r - (1 << k) + 1][k]);
}

void solve(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        stmin[i][0] = stmax[i][0] = x;
    }
    for(int j=1;(1<<j) <= n;j++){
        for(int i=1;i+(1<<j)-1<=n;i++){
            stmax[i][j] = max(stmax[i][j-1],stmax[i + (1<<(j-1))][j-1]);
            stmin[i][j] = min(stmin[i][j-1],stmin[i + (1<<(j-1))][j-1]);
        }
    }
    for(int i=1;i<=n-2;i++){
        int max1 = get(1,i,0);
        int l = i+1,r = n-1;
        while(l <= r){
            int mid = l + r >> 1;
            int min1 = get(i+1,mid,1);
            int max2 = get(mid+1,n,0);
            if(max1 < min1 || max1 < max2) l = mid + 1;
            else if(max1 > min1 || max1 > max2) r = mid - 1;
            else{
                puts("YES");
                printf("%d %d %d\n",i,mid - i,n - mid);
                return;
            }
        }
    }
    puts("NO");
}

int main(){
    scanf("%d",&t);
    while(t--){
        solve();
    }
    
    return 0;
}