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>
#define _for(i,a,b) for(int i = (a); i < b; ++i)
#define _rep(i,a,b) for(int i = (a); i <= b; ++i)
using namespace std;
int a[10+2];
bool flag = 0;
void dfs(int i, int l, int r){
    if(flag) return;
    if(i == 10) {
        flag = 1;
        return;
    }
    if(a[i] > l) dfs(i+1, a[i], r);
    if(a[i] > r) dfs(i+1, l, a[i]);
}
int main(){
    int n;
    cin>>n;
    while(n--){
        flag = 0;
        _for(i,0,10) cin>>a[i];
        dfs(0,0,0);
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

C++: #include <iostream>
#include <stack>
using namespace std;
int main()
{
    int N; cin >> N;
    while (N--) {
        int a[10];
        stack<int> b, c;
        for (int i = 0; i < 10; ++i) cin >> a[i];
        b.push(0);
        c.push(0);
        bool ok = true;
        for (int i = 0; i < 10; ++i) {
            if (b.top() > c.top()) {
                if (b.top() < a[i]) b.push(a[i]);
                else if (c.top() < a[i]) c.push(a[i]);
                else ok = false;
            }
            else {
                if (c.top() < a[i]) c.push(a[i]);
                else if (b.top() < a[i]) b.push(a[i]);
                else ok = false;
            }
        }
        cout << (ok ? "YES" : "NO") << endl;
    }
    return 0;
}

C++: #include <iostream>
using namespace std;
int case_cnt;
int ball[12];
bool visited[12];
int maxx;
int main()
{
  cin>>case_cnt;
  while(case_cnt--)
  {
	
	  for(int i=1;i<=10;i++) 
	  {
		  cin>>ball[i];
		  visited[i]=false;
	  }
	  maxx=ball[1];
	  visited[1]=true;
	  //找到一段递增序列
	  for(int i=2;i<=10;i++) 
	  {
		 if(ball[i]>maxx)
		 {
			 visited[i]=true;
			 maxx=ball[i];
		 }
	  }
	  //剩下的数中有无不递增的。先找到剩下数中的第一个
	  maxx=-1;
	  int i;
	  for(i=2;i<=10;i++) 
	  {
		 if(visited[i]) continue;
		 if(ball[i]<maxx) break;
		 maxx=ball[i];
	  }
	  if(i==11) cout<<"YES"<<endl;
	  else cout<<"NO"<<endl;
  }
   return 0;
}

C++: #define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<string>
using namespace std;

static int N;
static vector<int> balls;
static vector<int> A, B;
static bool flag;

void dfs(int id)
{
	if (flag) return;
	if (id >= 10)
	{
		flag = true;
		return;
	}
	//printf("%d\n", id);
	if ((A.size() > 0 && balls[id] > A.back()) || A.size() == 0)
	{
		A.push_back(balls[id]);
		dfs(id + 1);
	}
	else if ((B.size() > 0 && balls[id] > B.back()) || B.size() == 0)
	{
		B.push_back(balls[id]);
		dfs(id + 1);
	}
	
}




int main()
{
	while (scanf("%d", &N) != EOF)
	{
		while (N--)
		{
			balls.clear();
			balls.resize(10);
			for (int i = 0; i < 10; i++) scanf("%d", &balls[i]);
			A.clear();
			B.clear();
			flag = false;
			dfs(0);
			printf(flag ? "YES\n" : "NO\n");
		}
	}
	return 0;
}

C++: #include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
int a[10];
bool ans;
void dfs(int i,int r,int l){
	if(i==10)return;
	if(ans==0)return;
	if(r<a[i])dfs(i+1,a[i],l);
	else if(l<a[i])dfs(i+1,r,a[i]);
	else ans=0;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		for(int i=0;i<10;i++)cin>>a[i];
		dfs(0,0,0);
	if(ans)cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
	}
}

C++: #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <math.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <sstream>
#include <string>
using namespace std;
#define FOR(I,N) for(int I = 0; I < (int)(N); I++)
#define FIN(V) cout<<V<<endl
#define pb push_back
#define INF (1 << 30)
typedef pair<int, int> P;
int num[10];
int B[10];
int C[10];
int flag = false;
void solve(int, int, int);

int main(void){
	int N;
	cin >> N;
	for(int k = 0; k < N; k++){
		fill_n(B , 10, -1);
		fill_n(C , 10, -1);
		for(int i = 0; i < 10; i++){
			cin >> num[i];
		}
		solve(0, 0, 0);
		if(flag){cout << "YES" << endl; continue;}
		cout << "NO" << endl;
	}

	return 0;
}

void solve(int cnt,int right, int left){
	if(cnt == 10){
		flag = true;
		return;
	}
	if(num[cnt] > right) solve(cnt+1, num[cnt], left);
	if(num[cnt] > left) solve(cnt+1, right, num[cnt]);
}

C++: //aoj 0033
 
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <cmath>
#include <string>
#include <sstream>
#include <iomanip>
#include <complex>
using namespace std;
 
#define ll long long
#define vvi vector< vector<int> >
#define vi vector<int>
#define All(X) X.begin(),X.end()
#define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define pb push_back 
#define pii pair<int,int>
#define mp make_pair
#define pi 3.14159265359
#define shosu(X) fixed << setprecision(X)
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
 
int ball[10];
bool can = false;
 
void search(int r,int l,int n){
  //  cout << n << endl;
  if(n>=10) {
	can = true;
	return;
  }
  if(r<ball[n]) search(ball[n],l,n+1);
  if(l<ball[n]) search(r,ball[n],n+1);
}
 
int main(){
  int n;
  cin >> n;
  REP(i,n){
    REP(i,10) cin >> ball[i];
  	int right=0;
  	int left=0;
  	can = false;
  	search(right,left,0);
  	if(can) cout << "Yes" << endl;
  	else cout << "No" << endl;
  }
 
}

C++: #include <iostream>

using namespace std;

int main()
{
    int n,a[10],b[10],c[10];
    cin>>n;
    while(n>0)
    {
        for(int i=0;i<10;i++)
        {
            cin>>a[i];
        }
        b[0]=a[0];
        c[0]=0;

        int k=1,t=1;
        bool ei=true,el=true;
        for(int j=1;j<10;j++)
        {
            if(a[j]>b[k-1])
            {
                b[k]=a[j];
                k++;
            }
            else if(a[j]>c[t-1])
            {
                if(ei)
                {
                    c[0]=a[j];
                    ei=false;
                }
                else
                {
                    c[t]=a[j];
                    t++;
                }
            }
            else
            {
                el=false;
                break;
            }
        }
        if(el)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
        n=n-1;

    }
    return 0;
}

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