만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

밀림 점프

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

요약
나무 높이가 주어질 때 구간 [A, B]의 나무에서 출발해 구간 [C, D]의 나무에 닿는 최소 점프 횟수를 구합니다. 도달할 수 없으면 불가능을 출력합니다.
난이도

어려움10점 중 8점

유형
트리, 유니온 파인드, 배열
정답자
아직 제출이 없습니다

문제

수마트라의 열대 밀림에 나무 NN 그루가 있다. 나무는 왼쪽부터 오른쪽으로 0부터 N−1N - 1까지 번호가 매겨져 있다. 나무들의 높이는 모두 다르며, 나무 ii의 높이는 H[i]H[i]이다.

이 교수는 오랑우탄을 훈련시켜 나무 사이를 점프하며 이동하게 하고 있다. 한 번 점프할 때, 오랑우탄은 현재 있는 나무의 꼭대기에서 왼쪽 또는 오른쪽으로, 현재 나무보다 높은 가장 가까운 나무로 점프할 수 있다. 정확히 말하면, 오랑우탄이 나무 xx에 있을 때 나무 yy로 점프한다는 것은 다음 두 조건 중 하나를 만족하는 것과 같다.

  • H[y]>H[x]H[y] > H[x]이고, yy는 xx보다 작은 0 이상의 정수 중 이 조건을 만족하는 가장 큰 값이다.
  • H[y]>H[x]H[y] > H[x]이고, yy는 xx보다 큰 0 이상의 정수 중 이 조건을 만족하는 가장 작은 값이다.

교수는 오랑우탄을 위한 계획을 QQ개 가지고 있다. 각 계획은 정수 네 개 AA, BB, CC, DD(A≤B<C≤DA \le B < C \le D)로 주어진다. 교수는 오랑우탄이 어떤 나무 ss(A≤s≤BA \le s \le B)에서 출발해 점프를 거듭하여 최종적으로 나무 ee(C≤e≤DC \le e \le D)에 도착할 수 있는지 알고 싶다. 가능하다면, 교수는 오랑우탄이 가능한 한 가장 적은 횟수로 점프해서 계획을 완수하기를 원한다.

제한

  • 2≤N≤200 0002 \le N \le 200\,000
  • 1≤Q≤100 0001 \le Q \le 100\,000
  • 1≤H[i]≤N1 \le H[i] \le N (모든 0≤i≤N−10 \le i \le N - 1에 대해)
  • H[i]≠H[j]H[i] \neq H[j] (모든 0≤i<j≤N−10 \le i < j \le N - 1에 대해)
  • 0≤A≤B<C≤D≤N−10 \le A \le B < C \le D \le N - 1

예제1

  1. 예제 1

    입력
    2
    1 2
    1
    0 0 1 1
    
    예상 출력
    1