Editorial
연습 구간이 라고 하자. 번 지점에서는 속력이 이어야 하므로, 오른쪽에서 왼쪽으로 최적 속력을 정하면 된다. 으로 두면
이 항상 최적이다. 속력은 왼쪽에서 오른쪽으로 증가할 때 제한이 없으므로, 각 위치에서는 오른쪽으로 무사히 내려갈 수 있는 최대 속력을 잡으면 된다.
이제 오른쪽 끝 을 부터 까지 증가시키며 모든 질의를 오프라인으로 처리한다. 현재 오른쪽 끝이 일 때, 인 가장 오른쪽 위치를 last라고 하자. last보다 오른쪽의 모든 위치는 속도 제한에 걸리지 않고 도착점 때문에만 제한되므로, 에 대해 이다.
오른쪽 끝을 에서 로 늘릴 때, 이전 last를 기준으로 다음 변화가 생긴다.
- 인 시작점의 답은 만큼 증가한다.
- 인 시작점의 답은 만큼 증가한다.
또한 새로 속도 제한에 걸리는 위치는 정확히 을 만족하는 위치들이다. 따라서 각 값 에 대해 가장 큰 만 저장해 두면, last는 전체 과정에서 단조 증가한다.
각 시작점 에 대해 last가 처음으로 이상이 되는 시각을 이라고 하자. last가 한 번 증가할 때 지나가는 들에 대해 을 채우면 전체 이다.
또 를 전처리한다. 그러면 질의 의 답은 다음과 같다.
- 이면 답은 이다.
- 이면 답은 이다.
따라서 전체 시간 복잡도는 , 메모리 복잡도는 이다.