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++: /*
P135
POJ 2718 Smallest Difference
*/


#include <iostream>
#include <map>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <functional>
#include <string.h>
using namespace std;

int a[10];
void read()
{
    for(int i=0; i<10; ++i)
        scanf("%d", a+i);
}

void solve()
{
    int x1=0, x2=0;
    bool ans = true;
    for(int i=0; i<10; ++i)
    {
        if(x1 < x2) swap(x1, x2);
        if(x1 < a[i]) x1 = a[i];
        else if(x2 < a[i]) x2 = a[i];
        else {ans = false; break;}
    }
    if(ans) printf("YES\n");
    else printf("NO\n");
}



vector<int> L_bucket;
vector<int> R_bucket;

bool dfs2(int d){
    if(d == 10) return true;
    bool flag;
    if(L_bucket.size() == 0 || L_bucket.back() < a[d]){
        L_bucket.push_back(a[d]);
        flag = dfs2(d+1);
        L_bucket.pop_back();
    }
    if(flag) return true;
    if(R_bucket.size() == 0 || R_bucket.back() < a[d]){
        R_bucket.push_back((a[d]));
        flag = dfs2(d+1);
        R_bucket.pop_back();
    }
    if(flag) return true;
    return false;
}

void solve2()
{
    if(dfs2(0)) printf("YES\n");
    else printf("NO\n");
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--){
        read();
        solve2();
    }
}

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

int data[10];

int solve(int i, int a, int b){

  if(i == 10) return 1;

  int ans = 0;
  if(data[i] > a) ans += solve(i+1, data[i], b);
  if(data[i] > b) ans += solve(i+1, a, data[i]);

  return ans;
}

int main(){

  int n;

  cin >> n;
  while(n--){

    for(int i=0;i<10;i++) cin >> data[i];

    if(solve(0, 0, 0)) cout << "YES\n";
    else cout << "NO\n";

  }

}

C++: #include<cstdio>

int main(){
	int n, b, c, t;
	scanf("%d", &n);
	for(int i = 0; i < n; i++){
		b = c = 0;
		for(int j = 0; j < 10; j++){
			scanf("%d", &t);
			if(b < t){
				b = t;
			}else{
				if(c < t){
					c = t;
				}else{
					t = 11;
					break;
				}
			}
			if(b < c){
				t = b;
				b = c;
				c = t;
			}
		}
		if(t - 11){
			printf("YES\n");
		}else{
			printf("NO\n");
		}
	}
	return 0;
}

C++: #pragma GCC optimize("O3")
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
#include <bitset>
using namespace std;

using ll = long long;
using P = pair<int, int>;
using T = tuple<int, int, int>;

template <class T> inline T chmax(T &a, const T b) {return a = (a < b) ? b : a;}
template <class T> inline T chmin(T &a, const T b) {return a = (a > b) ? b : a;}

constexpr int MOD = 1e9 + 7;
constexpr int inf = 1e9;
constexpr long long INF = 1e18;
constexpr double pi = acos(-1);
constexpr double EPS = 1e-10;

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

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    int n; cin>>n;
    while(n--){
        vector<int> a(10);
        for(int i=0; i<10; i++) cin>>a[i];

        string ans = "NO";
        for(int bit=0; bit<(1<<10); bit++){
            vector<int> l, r;
            for(int i=0; i<10; i++){
                if(bit & (1 << i)) l.emplace_back(a[i]);
                else r.emplace_back(a[i]);
            }

            bool valid = true;
            for(int i=0; i+1<l.size(); i++){
                if(l[i] > l[i+1]) valid = false;
            }
            for(int i=0; i+1<r.size(); i++){
                if(r[i] > r[i+1]) valid = false;
            }

            if(valid) ans = "YES";
        }

        cout << ans << endl;
    }

    return 0;
}

C++: #include <stdio.h>
main(){
  int a[10],i,n,c=0,j,b=0,jud=1;
  scanf("%d",&n);
  for(i=0;i<n;i++){
    for(j=0;j<10;j++){
      scanf("%d",&a[j]);
	}
    for(j=0;j<10;j++){
      if(b>a[j]&&c<a[j]) c=a[j];
      else if(b>a[j]&&c>a[j]){
	jud=0;
	break;
      }
      else if(b<a[j]&&c<a[j]&&b>c) c=a[j];
      else b=a[j];
    }
    if(jud==0) printf("NO\n");
    else printf ("YES\n");
  }
  return 0; 
}

C++: #include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
#define ll long long int
#define ld long double
#define INF 1000000000
#define EPS 0.0000000001
#define rep(i,n) for(i=0;i<n;i++)
using namespace std;
typedef pair<int, int> P;

string str;

int main()
{
  int n;
  int i,j;
  int num;

  cin>>n;

  rep(i,n){

    bool yes=true;
    int max1=0,max2=0;

    rep(j,10){

      scanf("%d",&num);

      if(max1>num && max2>num){
	if(yes)	cout<<"NO"<<endl;
	yes=false;
	continue;
      }
      else if(max1>num)
	max2=num;
      else if(max2>num)
	max1=num;
      else
	max1>max2 ? max1=num : max2=num;

    }//repj
    if(yes)
      cout<<"YES"<<endl;
  }//repi
}

C++: #include <cstdio>
using namespace std;

int main()
{
    int N,ball[10],index=0;
    scanf("%d",&N);
    for(int i=0;i<N;++N) {
        for(int i=0;i<10;++i) {
            scanf("%d",&ball[i]);
        }
        while(index+2 <= 9) {
            if(ball[index] < ball[index+1]) {
                ++index;
                continue;
            } else if (ball[index] < ball[index+2]) {
                ++index;
                continue;
            } else {
                puts("NO");
                return -1;
            }
        }
        puts("YES");
        return 0;
    }
}

C++: #include <iostream>
using namespace std;
int main(){
  int N,t,B,C,i,j;
  cin >> N;
  for(i = 0 ; i < N ; i++){
    for( B = 0, C = 0, j = 0; j < 10; j++){
      cin >> t;
      //どちらにも入らない。
      if(B > t && C > t) break;
      //どっちにも入るなら大きい方に入れる。
      else if(B < t && C < t){
	if(B < C) C = t;
	else B = t;
      }
      //片方にだけ入るなら入れる。
      else if(B < t) B = t;
      else if(C < t) C = t;
    }
    //最後までループしたらYES else NO
    if(j == 10) cout << "YES" << endl;
    else cout << "NO" << endl;
  }
  return 0;
}