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

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

히스토그램 연결 경우의 수

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

요약
0 이상 h_i 미만인 x_i를 골라 히스토그램에서 잘라낸 뒤 남은 영역이 연결되도록 하는 경우의 수를 10^9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

유형
스택, 조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

2차원 격자는 양의 정수 쌍의 집합으로 나타낼 수 있다. 각 칸은 아래 그림과 같이 번호를 붙일 수 있다.

각 열의 높이가 h1,h2,⋯ ,hNh_1, h_2, \cdots, h_N인 히스토그램이 주어진다. 이 히스토그램의 영역은 i=1,2,⋯ ,Ni = 1, 2, \cdots, N에 대해 칸 (i,1),(i,2),⋯ ,(i,hi)(i, 1), (i, 2), \cdots, (i, h_i)를 모두 포함하는 집합으로 나타낼 수 있다. (hi=0h_i = 0이면 ii번째 열에는 칸이 하나도 없다는 뜻이다.)

0≤xi<hi0 \le x_i < h_i인 NN개의 정수 x1,x2,⋯ ,xNx_1, x_2, \cdots, x_N을 골라 높이가 x1,x2,⋯ ,xNx_1, x_2, \cdots, x_N인 부분 히스토그램을 빼낼 수 있다. 이렇게 부분 히스토그램을 제거하고 남은 영역은 다음과 같다. ⋃i=1N{(i,j):xi<j≤hi}.\bigcup_{i=1}^N \{ (i, j) : x_i < j \le h_i \}.

예를 들어 아래 그림은 h1=4h_1 = 4, h2=5h_2 = 5, h3=4h_3 = 4, h4=4h_4 = 4이고 x1=1x_1 = 1, x2=2x_2 = 2, x3=3x_3 = 3, x4=2x_4 = 2인 경우를 나타낸다.

남은 영역이 연결되어 있다는 것은, 남은 영역에 속한 모든 칸 쌍 ((r1,c1),(r2,c2))((r_1, c_1), (r_2, c_2))에 대해 다음 이동만으로 남은 영역을 벗어나지 않고 (r1,c1)(r_1, c_1)에서 (r2,c2)(r_2, c_2)로 갈 수 있다는 뜻이다.

  • (r,c)→(r+1,c)(r, c) \to (r+1, c)
  • (r,c)→(r−1,c)(r, c) \to (r-1, c)
  • (r,c)→(r,c+1)(r, c) \to (r, c+1)
  • (r,c)→(r,c−1)(r, c) \to (r, c-1)

남은 영역이 연결되도록 하는 (x1,x2,⋯ ,xN)(x_1, x_2, \cdots, x_N)의 경우의 수를 구하여라.

입력

첫째 줄에 정수 NN이 주어진다. 둘째 줄에 NN개의 정수 h1,h2,⋯ ,hNh_1, h_2, \cdots, h_N이 순서대로 주어진다.

출력

남은 영역이 연결되도록 하는 (x1,x2,⋯ ,xN)(x_1, x_2, \cdots, x_N)의 경우의 수를 109+710^9 + 7로 나눈 나머지를 출력한다.

제한

  • 1≤N≤250 0001 \le N \le 250\,000
  • 1≤hi≤1091 \le h_i \le 10^9

예제5

  1. 예제 1

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

    입력
    3
    2 3 4
    
    예상 출력
    12
    
  3. 예제 3

    입력
    3
    100 100 100
    
    예상 출력
    1000000
    
  4. 예제 4

    입력
    2
    100000 100000
    
    예상 출력
    999999937
    
  5. 예제 5

    입력
    2
    3 42
    
    예상 출력
    9