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<iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
#include<queue>
#include<cstdio> 
using namespace std;
int A[10],B[11],C[11];
bool dfs(int a,int b,int c){
	if(a==10){
		return true;
	}
	bool flag=false;
	if(A[a]>B[b-1]){
		B[b]=A[a];
		flag |=dfs(a+1,b+1,c);
	}	
	if(A[a]>C[c-1]){
		C[c]=A[a];
		flag |=dfs(a+1,b,c+1);
	}
	return flag;
}
int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		for(int i=0;i<10;i++){
			scanf("%d",&A[i]);
		}
		if(dfs(0,1,1)){
				printf("YES\n");
			}
			else{
				printf("NO\n");
			}
	}
	return 0;
}

C++: #include <iostream>
using namespace std;
const int N = 10;
int main(){
    int n,i,ans,a,b,c;;
    cin >> n;
    while(n--) {
    	ans=1;
    	b=c=-1;
        for(i=0;i<10;i++){
        	cin>>a;
        	if(a>b)
        		b=a;
        	else if(a>c)
        		c=a;
        	else
        		ans=0;
		}
		if(ans) puts("YES");
    	else puts("NO");
    }
}

C++: #include <cstdio>
#include <algorithm>
#define HEIGHT 10

using namespace std;

int a[HEIGHT];

void solve(){
	bool f=true;
	int right,left;
	right = left = 0;
	for(int i=0;i<HEIGHT;i++){
		if(right<a[i] && left<a[i]){
			if(right<left){
				left = a[i];
			} else {
				right = a[i];
			}
		} else if(right<a[i]){
			right = a[i];
		} else if(left<a[i]){
			left = a[i];
		} else {
			f = false;
			break;
		}
	}
	if(f) printf("YES");
	else printf("NO");
}
			
int main(){
	
	int lp;
	scanf("%d",&lp);
	
	for(int i=0;i<lp;i++){
		for(int j=0;j<HEIGHT;j++){
			scanf(" %d",&a[j]);
		}
		solve();	
	}
	return 0;
}

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

int main(){
  int N,t,B,C;
  cin >> N;
  for(int i = 0 ; i < N ; i++){
    B = C = 0;
    int j;
    for( j = 0; j < 10; j++){
      cin >> t;
      if(B >= t && C >= t) break;
      else if(B < t && C < t){
	if(B < C) B = t;
	else B = t;
      }
      else if(B < t) B = t;
      else if(C < t) C = t;
      //      cout << B << " ";
    }
    if(j == 10) cout << "YES" << endl;
    else cout << "NO" << endl;
  }
  return 0;
}

C++: #include <stdio.h>
int main(){
int n,a,b,temp;
bool f;
scanf("%d",&n);
for(int i=0;i<n;i++){
a=b=0;
f=true;
for(int j=0;j<10;j++){
scanf("%d",&temp);
if(temp>a)a=temp;
else if(temp>b)b=temp;
else f=false;
}
if(f)printf("YES\n");
else printf("NO\n");
}
}

C++: #include<bits/stdc++.h>
using namespace std;
main(){
  int n,a;
  srand((unsigned)time(NULL));
  cin>>n;
  for(int i=0;i<n;i++){
    for(int j=0;j<10;j++){
      cin>>a;
    }
    if(rand()%2==0){
      cout<<"YES"<<endl;
    }
    else{
      cout<<"NO"<<endl;
    }
  }
}

C++: // 2015/07/03 Tazoe

#include <iostream>
using namespace std;

int A[10];

bool DFS(int I, int B, int C)
{
	if(I==10)
		return true;

	if(A[I] > B && DFS(I+1, A[I], C))	// Bに入れて最後まで並べられれば
		return true;

	if(A[I] > C && DFS(I+1, B, A[I]))	// Cに入れて最後まで並べられれば
		return true;

	return false;
}

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

	for(int i=0; i<N; i++){
		for(int j=0; j<10; j++){
			cin >> A[j];
		}

		if(DFS(0, 0, 0)){
			cout << "YES" << endl;
		}
		else{
			cout << "NO" << endl;
		}
	}

	return 0;
}

C++: #include<iostream>
#include<stack>
#include<map>
using namespace std;
int main(){
  int n;
  cin >>n;
  while(n--){
    int a[10],x=0,y=0;
    stack<pair<int,int> > log;
    for(int i=0; i<10; i++) cin >>a[i];
    for(int i=0; i<10; i++){
      if(x>a[i] && y<a[i]) y = a[i];
      else if(x<a[i] && y>a[i]) x = a[i];
      else if(x<a[i] && y<a[i]){
	log.push(make_pair(x,i));
	x = a[i];
      }
      else if(x>a[i] && y>a[i]){
	if(log.empty()){
	  cout <<"NO"<<endl;
	  break;
	}
	x = log.top().first;
	i = log.top().second;
	y = a[i];
	log.pop();
      }
      if(i == 9) cout <<"YES"<<endl;
    }
  }
  return 0;
}

C++: /*
 * AOJ 0033: Ball
 * 题意：序号为1-10的10个球，按一定排列顺序进入2个队列之一，最终每队入队球的序号都为增序的方案是否存在。
 * 类型：贪心
 * 算法：对于每个球，若大于队列顶端元素，则可以记录该情况并继续递归。每次优先加入左边，可保证左边的顶端元素大于右边。
 */

#include <iostream>

using namespace std;

int balls[10];

int main() {
  //每次就先看左边能不能放，能放就放入，否则再看右边，右边也不能放，则不存在方案
  int n;
  cin >> n;
  while (n--) {
    for (int i = 0; i < 10; i++) cin >> balls[i];
    int l = 0, r = 0;
    bool flag = true;
    for (int i = 0; i < 10; i++) {
      if (balls[i] > l) {
        l = balls[i];
      } else if (balls[i] > r) {
        r = balls[i];
      } else {
        flag = false;
        break;
      }
    }
    if (flag) cout << "YES" << endl;
    else cout << "NO" << endl;
  }
}



// int a[10];


// int main() {
//   int T;
//   scanf("%d", &T);
//   while (T--) {
//     bool ans = true;
//     for (int i = 0; i < 10; ++i) {
//       scanf("%d", &a[i]);
//     }
//     int l, r;
//     l = r = 0;
//     for (int i = 0; i < 10; ++i) {
//       if (a[i] > l) {
//         l = a[i];
//       } else if (a[i] > r) {
//         r = a[i];
//       } else {
//         ans = false;
//         break;
//       }
//     }
//     printf("%s\n", ans ? "YES" : "NO");
//   }
//   return 0;
// }

C++: #include <bits/stdc++.h>
using namespace std;
int main(){
  long long n;
  cin >> n;
  for(int i=0;i<n;i++){
    long long a,b[11]={},c[11]={},cntb=1,cntc=1;
    bool f=true;
    for(int j=0;j<10;j++){
      cin >> a;
      if(b[cntb-1]>=a and c[cntc-1]>=a){
        cout << "NO" << endl;
        f=false;
        break;
      }
      if(b[cntb-1]<a and c[cntc-1]>=a){
        b[cntb]=a;
        cntb++;
      }else if(b[cntb-1]>=a and c[cntc-1]<a){
        c[cntc]=a;
        cntc++;
      }else{
        if(b[cntb-1]>c[cntc-1]){
          b[cntb]=a;
          cntb++;
        }else{
          c[cntc]=a;
          cntc++;
        }
      }
    }
    if(f){
      cout << "YES" << endl;
    }
  }
  return 0;
}

C++: #include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <string>
#include <map>
#include <vector>
#include <stack>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)

int main(void)
{
    int s[10], n, b = 0, c = 0;
    bool flag = true;

    cin >> n;
    rep(i, n) {
        rep(i, 10)
            cin >> s[i];
        rep(i, 10) {
            if (s[i] > b)
                b = s[i];
            else if (s[i] > c)
                c = s[i];
            else
                flag = false;
        }
        
        cout << (flag ? "YES" : "NO") << endl;
    }
    return 0;
}

C++: a[10];
int dfs(int l,int r,int i){
if(i>9)return 1;if(a[i]>l&&dfs(a[i],r,i+1))return 1;
if(a[i]>r&&dfs(l,a[i],i+1))return 1;
return 0;
}
main(n){
scanf("%d",&n);
for(;n;n--)
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),dfs(0,0,0)?puts("YES"):puts("NO");
return 0;
}