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

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

봉화대

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

요약
높이 1부터 N까지의 순열이 주어질 때, 각 구간의 최댓값이 왼쪽에서 오른쪽으로 증가하도록 마을을 연속한 구간으로 나누는 경우의 수를 세어 1e9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 분할 정복, 세그먼트 트리, 조합론
정답자
아직 제출이 없습니다

문제

NN개의 마을이 산등성이를 따라 1번부터 NN번까지 일렬로 있다. 각 마을의 높이는 1 이상 NN 이하의 자연수 가운데 하나이며, 모든 마을의 높이는 서로 다르다. 외침을 막기 위해 마을을 여러 구간으로 나누고, 각 구간에서 가장 높은 마을에 봉화대를 설치하려 한다. 각 구간은 연속된 마을을 하나 이상 포함해야 하고, 각 마을은 정확히 하나의 구간에 포함되어야 한다. 봉화대끼리 효율적으로 통신하도록, 봉화대가 설치된 마을의 높이는 번호가 커지는 순서로 볼 때 증가해야 한다. 가능한 구간 배치의 개수를 구하시오.

그림 H.1: 조건을 만족한 봉화대 설치 예시그림 H.2: 조건을 만족하지 않은 봉화대 설치 예시

입력

첫째 줄에는 마을의 개수 NN이 주어진다. (1≤N≤500 0001 \leq N \leq 500\ 000)

둘째 줄에는 각 마을의 높이 h1,h2,⋯ ,hNh_1, h_2, \cdots, h_N이 공백으로 구분되어 주어진다. (1≤hi≤N1 \leq h_i \leq N)

hih_i는 ii번째 마을의 높이이며, 값은 서로 다르다.

출력

조건을 만족하며 NN개의 마을을 구간으로 나누는 방법의 가짓수를 1 000 000 0071\ 000\ 000\ 007로 나눈 나머지를 출력한다.

힌트

첫 번째 예제의 가능한 모든 배치는 (1 / 4 / 2 5 3), (1 / 4 2 / 5 3), (1 / 4 2 5 3), (1 4 / 2 5 3), (1 4 2 / 5 3), (1 4 2 5 3) 이다. /는 구간의 경계이며, 봉화대는 밑줄로 강조된 높이의 마을에 설치된다.

예제3

  1. 예제 1

    입력
    5
    1 4 2 5 3
    
    예상 출력
    6
    
  2. 예제 2

    입력
    3
    3 2 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    8
    6 3 1 7 2 5 4 8
    
    예상 출력
    20