UDP 스택

시간 제한1초메모리 제한1024 MB

요약
순열의 원소를 바닥을 열고 닫을 수 있는 세 스택에 차례로 넣고 배출해 값을 오름차순으로 만들 수 있는지 판별한다.
난이도

어려움10점 중 8점

유형
스택, 그리디, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

UDP 마을에는 세 개의 신비한 스택이 있다. 이를 차례로 U스택, D스택, P스택이라 하자. 이 스택들은 특별해서 스택의 바닥을 열고 닫을 수 있다. 바닥이 열려 있는 스택에 원소를 삽입하면 그 즉시 바닥 아래로 떨어지며, 바닥이 닫혀 있는 스택의 바닥을 열면 저장되어 있던 원소들이 모두 바닥 아래로 떨어진다. 이때, 스택의 바닥에 가까운 쪽의 원소들이 더 먼저 바닥으로 떨어진다. 초기에는 U스택의 바닥만이 열려 있으며, D스택과 P스택의 바닥은 닫혀 있다.

어느 날, UDP 마을에서 길이가 NN인 순열 AA가 발견되었다. 포닉스는 다음 두 연산만을 사용할 수 있다.

  • 순열 AA의 가장 앞 원소를 세 스택 중 하나에 삽입한 후 순열에서 삭제한다. 단, 이 연산은 순열 AA가 비어있지 않을 때만 가능하다.
  • 현재 바닥이 열려 있는 스택을 닫은 후 바닥이 닫혀 있는 스택 중 하나를 골라 연다.

포닉스는 순열 AA와 세 스택이 모두 빌 때까지 연산을 반복한 후, 먼저 떨어진 것이 앞에 오도록 원소들을 나열할 것이다. 포닉스가 원소들을 오름차순으로 재배열할 수 있을지 판별하여라.

입력

첫째 줄에 테스트케이스의 개수 TT가 주어진다. (1≤T≤500 000)(1 \le T \le 500\ 000)

각 테스트케이스의 첫째 줄에 순열의 길이 NN이 주어진다. (1≤N≤200 000)(1 \le N \le 200\ 000)

각 테스트케이스의 둘째 줄에 순열 AA의 원소 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. A_iA\_i는 11 이상 NN 이하의 서로 다른 정수이다.

모든 테스트케이스에 대해 NN의 합이 500 000500\ 000 이하임이 보장된다.

출력

각 테스트케이스에 대해 포닉스가 원소들을 오름차순으로 재배열하는 것이 가능하면 YES, 아니면 NO를 한 줄에 하나씩 순서대로 출력하여라.

예제1

  1. 예제 1

    입력
    3
    5
    1 4 5 3 2
    4
    1 4 3 2
    5
    4 5 3 2 1
    
    예상 출력
    YES
    YES
    NO