만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

UDP 스택

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

요약
순열이 주어질 때, 특수한 스택 U, D, P에 원소를 넣어 떨어진 순서대로 나열하면 오름차순이 되는지 판별합니다.
난이도

어려움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의 원소 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 공백으로 구분되어 주어진다. AiA_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