Ball (AOJ 0033) by Respect2D
Contest: 408    RunID: 385077    Status: Accepted    Date: Mon Apr 23 19:47:34 JST 2012


/*
貪欲法により解けます(あり本第2版の P.24だよ!)
- 左の一番上の球の値と, 右の一番上の球の値を見比べて,
  大きい値の穴の方に, 球を入れられるなら入れた方がいい.
- これは, 小さい値の穴を残した方が, 後々お得になるからです.
- 「大きい方に入れられるなら入れる」→「それでだめなら小さい方に入れる」→「それでもダメならNO」をループで繰り返しましょう.
 */
#include <iostream>
using namespace std;

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

  while(T--){
    int b = 0; //←のあな
    int c = 0; //→のあな
    bool ans = true; //ans == trueならYES, ans == falseならNO

    for(int i = 0; i < 10; i++){
      int a;
      cin >> a;

      //すでにNOとわかっているなら, 処理をせずcontinue
      if(!ans) continue;

      //←の穴の一番上の値より, →の穴の一番上の値の方が大きい
      if(b < c){
        if(c < a)      c = a;       //大きい方(→)に乗せられるなら乗せる(その方が後々得だから)
        else if(b < a) b = a;
        else           ans = false; //小さい方(←)にも乗せられなかったら, NOとなる
      }
      //←の穴の一番上の値より, →の穴の一番上の値の方が小さい
      else{
        if(b < a)      b = a;       //大きい方(←)に乗せられるなら乗せる(その方が後々得だから)
        else if(c < a) c = a;
        else           ans = false; //小さい方(→)にも乗せられなかったら, NOとなる
      }
    }

    if(ans) cout << "YES\n";
    else    cout << "NO\n";
  }
}