func_code_string: #include <bits/stdc++.h>   using namespace std;                               const int N=2e5+7;      int n;   int x=-1,y=-1,z=-1;          int a[N], t[N*4];   vector<int> suff(N), pref(N);       void build(int v=1, int tl=1, int tr=n){     if(tl==tr) t[v]=a[tl];     else {       int tm = (tl+tr)/ 2;       build(v*2, tl, tm);       build(v*2+1,tm+1,tr);       t[v]=min(t[v*2], t[v*2+1]);     }   }   int get(int v, int tl, int tr, int l, int r){     if(l<=tl and tr<=r) return t[v];     if(r < tl || tr< l) return INT_MAX;     int tm=(tl + tr)>>1;     return min(get(v*2, tl, tm, l, r), get(v*2+1, tm+1,tr,l,r));   }   void calc(){     pref[1]=a[1];     for(int i=2;i<=n;i++) pref[i]=max(pref[i-1], a[i]);     suff[n]=a[n];     for(int i=n-1;i>=1;i--) suff[i]=max(suff[i+1], a[i]);   }   int main(){     ios_base::sync_with_stdio(false);     cin.tie(0);     int tt;     cin>>tt;     while(tt--){            cin>>n;                        for(int i = 1; i <= n; i++) cin>>a[i];       build();      calc();      bool flag=false;      int x, y, z;      for(int i=n;i>=3;i--){       int value = suff[i];       auto j1 = lower_bound(pref.begin(), pref.begin()+i-1, value);        int start = j1 - pref.begin();          auto j2 = upper_bound(pref.begin(), pref.begin()+i-1, value);       int end = j2 - pref.begin();       //cout<<start<<     <<end<<   ;       if(start >= end) continue;              int low= start, high=end;       while(high - low > 1) {         int mid = (low + high) / 2;         if (get(1,1,n,mid, i-1)<value) {           low=mid;         } else {           high=mid;         }       }       //cout<<     << high <<   n ;       if (high < i and get(1,1,n,high,i-1) == value and pref[high-1] == value) {        x = high-1;        y = i-high;        z = n-i+1;         flag=true;       }      }      if(!flag)       cout<< NO n ;      else       cout<< YES n <<x<<     << y <<     << z <<  n ;     }   }   