만드는 중입니다

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

점프

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

요약
1층 발판의 임의의 정수 위치에서 출발해 위로 처음 만나는 발판으로 점프하며, K층 발판에 도달하는 최소 점프 횟수를 구합니다.
난이도

보통10점 중 7점

유형
BFS, 그래프, 정렬
정답자
아직 제출이 없습니다

문제

간단한 점프 게임이 있다. 캐릭터는 1층에 있는 발판 중 하나를 골라 정수 위치에서 시작할 수 있다. 캐릭터는 다음 두 가지 액션 중 하나를 할 수 있으며, 게임의 목표는 가장 높은 발판에 최소한의 점프로 도착하는 것이다.

  1. 현재 위치한 발판 위에서 위치가 정수가 되도록 자유롭게 움직인다. 즉, 좌/우로 1씩 움직일 수 있다.
  2. 현재 위치한 발판에서 수직으로 점프한다. 이때 처음 만나는 위치의 발판으로 이동한다. 즉, 현재 위치에서 위쪽으로 반직선을 그을 때 첫 교점이 생기는 발판으로 이동한다.

아래와 같은 예시를 생각해 보자.

1층에는 발판이 2개 있다. 1층의 오른쪽 발판과 왼쪽 발판 중 어느 곳에서든 캐릭터는 시작할 수 있으며, 이 경우 오른쪽 발판에서 4층으로 1번의 점프로 이동하는 것이 최적이다. 또한 점프 방식의 정의에 따라, 1층의 오른쪽 발판 위에 캐릭터가 있고 위치 8에서 점프하면 2층의 발판에 도달한다.

입력

첫 줄에 발판의 개수 NN과 가장 높은 발판이 몇 층인지를 나타내는 정수 KK가 주어진다. 다음 NN개 줄에는 발판의 정보를 나타내는 정수 LiL_i, RiR_i, KiK_i가 주어진다. 이는 ii번째 발판이 LiL_i에서 RiR_i까지의 구간으로 나타나며 KiK_i층에 위치함을 의미한다. 같은 층에 있는 발판끼리는 겹치지 않는다. 1층과 KK층에는 적어도 하나의 발판이 있음이 보장된다.

출력

1층의 임의의 발판에서 출발하여 KK층의 임의의 발판에 도착하는 최소 점프 횟수를 출력한다. 도달할 방법이 없으면 -1을 출력한다.

제한

  • 1≤N,K≤300 0001 \le N, K \le 300\,000
  • 1≤Li<Ri≤1091 \le L_i < R_i \le 10^9, 1≤Ki≤K1 \le K_i \le K

예제1

  1. 예제 1

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