#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
typedef pair<int,int> pi;

#ifdef LOCAL
#define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
#else
#define debug(...) 69
#endif
template <typename Arg>
void __f(string name, Arg arg) {
	cerr << name << " = " << arg << endl;
}
template <typename Head, typename... Tail>
void __f(string names, Head head, Tail... tail) {
	string cur = "";
	for (auto ch: names){if(ch==','){break;}else{cur+=ch;}}
	string nxt = names.substr(cur.size()+2);
	cerr << cur << " = " << head << ", ";
	__f(nxt, tail...);
}

const int mxn = 2e5 + 5;
int q, n, a[mxn];

struct node {
	int s, e, m, mxv, mnv;
	node *l, *r;
	node(int _s, int _e) {
		s = _s, e = _e, m = (s + e) / 2;
		mxv = 0, mnv = 0;
		if (s != e) {
			l = new node(s, m);
			r = new node(m + 1, e);
		}
	}
	void upd(int x, int nv) {
		if (s == e) {
			mxv = nv;
			mnv = nv;
			return;
		}
		if (x > m) r->upd(x, nv);
		if (x <= m) l->upd(x, nv);
		mxv = max(l->mxv, r->mxv);
		mnv = min(l->mnv, r->mnv);
	}
	int rmaxq(int qs, int qe) {
		if (qs == s && qe == e) return mxv;
		if (qs > m) return r->rmaxq(qs, qe);
		if (qe <= m) return l->rmaxq(qs, qe);
		return max(l->rmaxq(qs, m), r->rmaxq(m + 1, qe));
	}
	int rminq(int qs, int qe) {
		if (qs == s && qe == e) return mnv;
		if (qs > m) return r->rminq(qs, qe);
		if (qe <= m) return l->rminq(qs, qe);
		return min(l->rminq(qs, m), r->rminq(m + 1, qe));
	}
} *seg;

int32_t main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> q;
	while (q--) {
		cin >> n;
		seg = new node(1, n);
		for (int i = 1; i <= n; ++i) {
			cin >> a[i];
			seg->upd(i, a[i]);
		}
		bool ok = false;
		int cur = 0;
		for (int i = 1; i <= n - 2; ++i) {
			cur = max(cur, a[i]);
			int l = i, r = n, ans = -1;
			while (l + 1 < r) {
				int mid = (l + r) / 2;
				int b = seg->rminq(i + 1, mid);
				if (b > cur) l = mid;
				else if (b < cur) r = mid;
				else {
					int c = seg->rmaxq(mid + 1, n);
					if (c > cur) l = mid;
					else if (c < cur) r = mid;
					else {
						ans = mid;
						break;
					}
				}
			}
			if (ans == -1) continue;
			if (cur == seg->rminq(i + 1, ans) && cur == seg->rmaxq(ans + 1, n)) {
				cout << "YES\n";
				cout << i << ' ' << ans - i << ' ' << n - ans << '\n';
				ok = true;
				break;
			}
		}
		if (!ok) cout << "NO\n";
	}
	return 0;
}
