아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

데카르트 트리

시간 제한3초메모리 제한256 MB

요약
키가 1부터 n까지인 이진 탐색 트리이면서 주어진 우선순위에 대해 최대 힙인 카르테시안 트리의 개수를 10^9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

유형
트리, 동적 계획법, 조합론, 스택
정답자
아직 제출이 없습니다

문제

최근 대학 강의에서 바샤는 데카르트 트리를 배웠다. 데카르트 트리는 각 정점에 키와 우선순위 두 값을 저장하는 이진 트리로, 키에 대해서는 이진 탐색 트리이고 우선순위에 대해서는 최대 힙이다. 즉

  • 정점 vv의 왼쪽 부분 트리에 있는 모든 정점의 키는 정점 vv의 키보다 작다.
  • 정점 vv의 오른쪽 부분 트리에 있는 모든 정점의 키는 정점 vv의 키보다 크다.
  • 정점 vv의 자식들의 우선순위는 정점 vv의 우선순위보다 크지 않다.

시험에서 바샤는 다음과 같은 문제를 받았다. (키, 값) 형태의 nn개의 쌍이 주어지고, ii번째 쌍은 (i,yi)(i, y_i)이다. 정점 ii의 키로 ii를, 우선순위로 yiy_i를 사용해 데카르트 트리를 만드는 방법의 수를 구해야 한다. 이 수는 매우 클 수 있으므로 109+710^9+7로 나눈 나머지를 구한다.

두 데카르트 트리는 루트가 다르거나, 두 트리에서 서로 다른 조상을 가지는 정점이 존재하면 서로 다른 것으로 본다.

입력

첫째 줄에는 테스트 케이스의 수 tt가 주어진다. 그다음에 각 테스트 케이스의 설명이 이어진다.

각 테스트 케이스의 설명은 두 줄로 이루어진다. 첫째 줄에는 트리의 정점 수 nn (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5)이 주어진다. 둘째 줄에는 nn개의 정수 yiy_i (1≤yi≤1091 \le y_i \le 10^9)가 주어지며, ii번째 정점의 우선순위이다.

모든 테스트 케이스의 nn의 합은 2⋅1052 \cdot 10^5를 넘지 않는다.

출력

각 테스트 케이스마다 주어진 우선순위 집합으로 만들 수 있는 서로 다른 데카르트 트리의 수를 109+710^9+7로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2
    4
    2 4 1 3
    6
    7 3 3 1 1 3
    
    예상 출력
    1
    10