수열과 쿼리 36

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

요약
구간 [l,r] 안에서 최댓값과 최솟값의 차가 y-x인 부분 구간 [x,y]의 개수를 세는 쿼리에 답한다.
난이도

어려움10점 중 9점

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

문제

길이가 N인 수열 A1, A2, ..., AN이 주어진다. 수열의 모든 수는 1 이상 N 이하이며 서로 다르다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오. 

  • l r: l ≤ x ≤ y ≤ r 이며, (max_i=xyA_i)−(min_i=xyA_i)=y−x(max\_{i=x}^{y} A\_i) - (min\_{i=x}^{y} A\_i) = y - x 를 만족하는 (x,y)(x, y) 정수 쌍의 개수를 출력하라.

입력

첫째 줄에 수열의 크기 N이 주어진다. (1 ≤ N ≤ 120,000)

둘째 줄에는 A1, A2, ..., AN이 주어진다. 모든 수는 서로 다르다. (1 ≤ Ai ≤ N)

셋째 줄에는 쿼리의 개수 M이 주어진다. (1 ≤ M ≤ 120,000)

넷째 줄부터 M개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. (1 ≤ l ≤ r ≤ N)

출력

쿼리의 결과를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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