히스토그램과 쿼리

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

요약
히스토그램의 각 구간 쿼리에 대해, 영역을 정확히 덮는 데 필요한 정수 직사각형의 최소 개수를 구한다.
난이도

어려움10점 중 9점

유형
스택, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

너비가 11이고 높이가 a_1,a_2,⋯ ,a_Na\_1, a\_2, \cdots, a\_N인 NN개의 직사각형이 주어진다. 각 직사각형은 주어지는 순서대로 11부터 NN까지의 번호가 붙어 있으며, ii번 직사각형의 높이는 a_ia\_i이다.

주어진 직사각형들을 순서대로 이어 붙이면 히스토그램이 만들어진다. 당신은 히스토그램을 다음 조건에 따라 직사각형 모양으로 덮을 수 있다.

  • 직사각형은 가로 길이와 세로 길이가 모두 11 이상인 정수이다.
  • 직사각형들 사이에는 겹침이 있어서는 안 된다.
  • 직사각형이 히스토그램의 영역 바깥을 덮어서는 안 된다.
  • 히스토그램의 모든 부분이 직사각형에 의해 덮여야 한다.

QQ개의 쿼리가 주어진다. 각 쿼리는 두 정수 l_j,r_jl\_j, r\_j로 구성되어 있으며, l_jl\_j번부터 r_jr\_j번까지의 직사각형을 순서대로 이어 붙여 만든 히스토그램을 덮기 위해 최소 몇 개의 직사각형이 필요한지 구해야 한다.

입력

첫째 줄에 히스토그램을 구성하는 직사각형의 개수 NN이 주어진다. (1≤N≤1061 \le N \le 10^6)

둘째 줄에 NN개의 정수 a_1,a_2,⋯ ,a_Na\_1, a\_2, \cdots, a\_N이 공백으로 구분되어 주어진다. (1≤a_i≤N1 \le a\_i \le N)

셋째 줄에 쿼리의 개수 QQ가 주어진다. (1≤Q≤1061 \le Q \le 10^6)

다음 QQ개의 줄에는 두 개의 정수 l_j,r_jl\_j, r\_j가 공백으로 구분되어 주어진다. (1≤l_j≤r_j≤N1 \le l\_j \le r\_j \le N)

출력

QQ개의 줄에 걸쳐 각 쿼리의 답을 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    10
    3 1 4 1 5 9 2 6 5 3
    6
    2 7
    1 8
    2 8
    1 8
    2 8
    4 5
    
    예상 출력
    5
    7
    6
    7
    6
    2
    
  2. 예제 2

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