Go: package main

import "fmt"

func isOrdered(a []int) bool {
	if len(a) <= 1 {
		return true
	}
	for i := 0; i+1 < len(a); i++ {
		if a[i] > a[i+1] {
			return false
		}
	}
	return true
}

func main() {
	// ボールの数がせいぜい10個しかないので、全てのボールの落とし方を全探索することが可能
	// Bit全探索を行う。右から見てj番目のビットが立っているときには左側の筒、立っていない時は右側の筒にいれる物とする。
	// 全てのボールを落とし終わった後に、それぞれの筒で昇順に並んでいるか調べることにする。
	var t int
	fmt.Scan(&t)
	ans := make([]bool, t)
	for i := 0; i < t; i++ {
		balls := make([]int, 10)
		for i := range balls {
			fmt.Scan(&balls[i])
		}
		ans[i] = false
		for bits := 0; bits < (1 << uint(10)); bits++ {
			pipeB := make([]int, 0)
			pipeC := make([]int, 0)
			for j := 0; j < 10; j++ {
				if (bits & (1 << uint(j))) != 0 {
					pipeB = append(pipeB, balls[j])
				} else {
					pipeC = append(pipeC, balls[j])
				}
			}
			if isOrdered(pipeB) && isOrdered(pipeC) {
				// fmt.Printf("test case %d - OK pattern - pipeB %v, pipec %v\n", i, pipeB, pipeC)
				ans[i] = true
				break
			}
		}
	}
	for i := range ans {
		if ans[i] {
			fmt.Println("YES")
		} else {
			fmt.Println("NO")
		}
	}
}

C++: #include<cstdio>

using namespace std;


//引数はそれぞれ、入力配列のカウント変数、a[]のカウント変数,b[]のカウント変数,答え配列,筒を意味するaとb配列,成功判定flg変数
bool tansaku(int count,int n1,int n2,int ans[],int a[],int b[],bool flg)
{
	//カウントが１０になったときは成功したとき
	if (count == 10)
	{
		return true;
	}
	//既にflgがtrueならさっさと返す
	if (flg == false)
	{
		//最初はn1は１である
		if (a[n1] < ans[count])		//１つ前の要素と比べている
		{
			//a[n1]にans[count]を格納
			//最初に足しておくと動作が正しくなる
			n1++;					
			//答えを格納
			a[n1] = ans[count];
			//入力された配列に使うカウント変数
			count++;
			//再帰関数
			bool hozon = tansaku(count,n1,n2,ans,a,b,flg);
			//trueだった場合falseで上書きしないように調整
			if (hozon == true)
			{
				flg = true;
			}
		}
		//ひとつ前の要素と比べている
		if (b[n2] < ans[count])
		{
			//先に足す
			n2++;
			//b[n2](最初はn2 = 1)に小さい順に入れていく
			b[n2] = ans[count];
			//関数の前でインクリメント
			count++;
			//再帰関数
			bool hozon = tansaku(count,n1,n2,ans,a,b,flg);
			//trueだった場合上書きしないようにする
			if (hozon == true)
			{
				flg = true;
			}
		}
	}

	return flg;
}


int main(void)
{
	//何回回すか
	int n = 0;
	//10個のボール
	int a[10] = {0};
	//関数で送るためのいらない変数
	int damy[20] = {0};
	bool ans_flg[100] = {false};

	scanf("%d",&n);
	//n回文の入力
	for (int i = 0;i < n;i++)
	{
		scanf("%d %d %d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
		if (tansaku(0,0,0,a,damy,damy,false) == true)
		{
			//ans_flg[i] = true;
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}

	/*for (int i = 0;i < n;i++)
	{
		if (ans_flg[i] == true)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}*/

	return 0;
}

C++: #include<iostream>
#include<vector>
using namespace std;

bool judge(vector<int> a, vector<int> b) {
	for (int i = 1; i < a.size(); i++)
	{
		if (a[i] < a[i - 1]) return false;
	}
	for (int i = 1; i < b.size(); i++)
	{
		if (b[i] < b[i - 1]) return false;
	}
	return true;
}

int main() {

	int num;
	int data[10];
	vector<int> a, b;
	cin >> num;
	for (int i = 0; i < num; i++)
	{
		
		for (int j = 0; j < 10; j++)
		{
			cin >> data[j];
		}
		int j;
		for (j = 0; j <= 1024 ; j++)
		{
			a.clear();
			b.clear();
			for (int k = 0; k < 10; k++)
			{
				if ((j >> k) & 1)
				{
					a.push_back(data[k]);
				}
				else
				{
					b.push_back(data[k]);
				}
			}
			if (judge(a,b))
			{
				cout << "YES" << endl;
				break;
			}
		}
		if (j==1025)
		{
			cout << "NO" << endl;
		}

	}
	//system("pause");
	return 0;
}

C++: #include <iostream>
#include <algorithm>
#include <cctype>
#include <cstdio>
#include <math.h>
using namespace std;

int main(){
	int b,c,m,n,s;
	cin>>m;
	for(int i=0;i<m;i++){
		b=0,c=-1,s=0;
		for(int j=0;j<10;j++){
			cin>>n;
			if(n>b&&n>c){
				if(b>c)b=n;
				else c=n;
			}
			else if(n>b)b=n;
			else if(n>c)c=n;
			else {cout<<"NO"<<endl;s=1;break;}
		}
		if(s==0)cout<<"YES"<<endl;
	}
}

C++: #include <iostream>
#include <queue>
using namespace std;

bool solver(queue<int> q, int a, int b){
    bool result = false;
    if(q.empty()) return true;
    int tmp = q.front();
    if(tmp > a){
        q.pop();
        result = solver(q, tmp, b);
        q.push(tmp);
    }
    if(tmp > b){
        q.pop();
        result = solver(q, a, tmp);
        q.push(tmp);
    }
    return result;
}

int main(){
    int n;
    cin >> n;

    for(int i=0; i<n; i++){
        queue<int> q;
        for(int j=0; j<10; j++){
            int tmp;
            cin >> tmp;
            q.push(tmp);
        }
        cout << (solver(q,0,0)?"YES":"NO") << endl;
    }
    return 0;
}

C++: #include<cstdio>
#include<iostream>
#include<string>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#include<complex>
#include<stack>
using namespace std ;
typedef vector<int> vi ;
typedef vector<vi> vvi ;
typedef vector<string> vs ;
typedef pair<int, int> pii; 
typedef long long ll ;

#define loop(i,a,b) for(int i = a ; i < b ; i ++)
#define rep(i,a) loop(i,0,a)
#define all(a) (a).begin(),(a).end()

int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};

int main(void){
  stack<int> st1;
  stack<int> st2;
  
  int n ;
  cin>>n;
  bool ans;
  rep(j,n){
    ans = false;
    st1.push(0);
    st2.push(0);
    rep(i,10){
      int inp;
      
      cin>>inp;

      if(st1.top()<inp){
	st1.push(inp);
      }else if(st2.top()<inp){
	st2.push(inp);
      }else{
	ans= true;
      }

    }
  if(!ans)cout<<"YES";
  else cout<<"NO";
  cout<<endl;
  }

}

C++: #include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string.h>
#include <queue>
#include <functional>
const int INF =1e5;
const int MOD = 1e9 + 7;
using namespace std;
typedef pair<int,int> P;
typedef long long lint;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define fill(x,y) memset(x,y,sizeof(x))
#define all(x) (x).begin(),(x).end()
#define pb push_back
vector<int> a;
vector<int> b;
int v[10];
bool dfs(int);

int main(){
    int n;
    cin>>n;
    while(n>0){
        rep(i,10){
            cin>>v[i];
        }
        a.erase(all(a));
        b.erase(all(b));
        if(dfs(0)){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }
        n--;
    }
    return 0;
}

bool dfs(int i){
    if(i==10) return true;
    vector<int>::iterator itr;
    if(a.size()>0){
        itr= a.end();
        if(v[i]>*itr){
            a.pb(v[i]);
            if(dfs(i+1)) return true;
            a.pop_back();
        }
    }else{
        a.pb(v[i]);
        if(dfs(i+1)) return true;
        a.pop_back();
    }
    if(b.size()>0){
        itr= b.end();
        if(v[i]>*itr){
            b.pb(v[i]);
            if(dfs(i+1)) return true;
            b.pop_back();
        }
    }else{
        b.pb(v[i]);
        if(dfs(i+1)) return true;
        b.pop_back();
    }
    if(i>0){
        vector<int>::iterator itr2;
        itr= a.end();
        itr2= b.end();
        if(v[i]<=*itr && v[i]<=*itr2)return false;
    }
    return false;
}

C++: #include <iostream>

using namespace std;

int main(void) {
    int N, a, b, c;
    cin >> N;
    for (; N--; ) {
        b = c = 0;
        bool ok = true;
        for (int i = 0; i < 10; i++) {
            cin >> a;
            if (a < b && a < c) {
                ok = false;
                break;
            } else if (a < b) {
                c = a;
            } else if (a < c) {
                b = a;
            } else if (c > b) {
                c = a;
            } else {
                b = a;
            }
        }
        cout << (ok ? "YES" : "NO") << endl;
    }
    return 0;
}