Problem:
玉

図のように二股に分かれている容器があります。1 から 10 までの番号が付けられた10 個の玉を容器の開口部 A から落とし、左の筒 B か右の筒 C に玉を入れます。板 D は支点 E を中心に左右に回転できるので、板 D を動かすことで筒 B と筒 C のどちらに入れるか決めることができます。

開口部 A から落とす玉の並びを与えます。それらを順番に筒 B 又は筒 Cに入れていきます。このとき、筒 B と筒 C のおのおのが両方とも番号の小さい玉の上に大きい玉を並べられる場合は YES、並べられない場合は NO と出力するプログラムを作成してください。ただし、容器の中で玉の順序を入れ替えることはできないものとします。また、続けて同じ筒に入れることができるものとし、筒 B, C ともに 10 個の玉がすべて入るだけの余裕があるものとします。

Input

複数のデータセットが与えられます。１行目にデータセット数 N が与えられます。つづいて、N 行のデータセットが与えられます。各データセットに 10 個の番号が左から順番に空白区切りで与えられます。

Output

各データセットに対して、YES または NO を１行に出力して下さい。

Sample Input

2
3 1 4 2 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1

Output for the Sample Input

YES
NO

Solution in Ruby (judge verdict: Accepted)

#encoding:utf-8 No.0033 2014.10.7
n = gets.chomp.to_i
cylinderA = Array.new(n)
judgement = Array.new(n)

n.times do |i|
  cylinderA[i] = gets.chomp.split.map{|item| item.to_i}
  cylinderB = []
  cylinderC = []
  
  cylinderB.push cylinderA[i][0] #まずひとつcylinderBに入れる
  j = 1
  while j < cylinderA[i].length  #cylinderAからひとつずつ落としていく
    if cylinderA[i][j] > cylinderB.last
      cylinderB.push cylinderA[i][j]  #cylinderBには確実に昇順に並ぶ
    else
      cylinderC.push cylinderA[i][j]  #cylinderCには昇順に並ぶとは限らない
    end
    j += 1
  end
  
  if cylinderC == cylinderC.sort
    judgement[i] ="YES"
  else
    judgement[i] ="NO"
  end
end

puts judgement