문제 설명
충근이는 10억개의 손가락을 가진 상상 속의 외계인 친구가 생겼다. 이 외계인은 곧 기타를 잡고, 인터넷에서 간단한 멜로디를 검색하더니 연주를 하기 시작했다.
보통 기타는 1번 줄부터 6번 줄까지 총 6개의 줄이 있고, 각 줄은 P개의 플랫으로 나누어져 있다. 플랫의 번호도 1번부터 P번까지 나누어져 있다.
멜로디는 음의 연속이고, 각 음은 줄에서 해당하는 플랫을 누르고 줄을 튕기면 연주할 수 있다. 예를 들면, 4번 줄의 8번 플랫을 누르고 튕길 수 있다. 만약, 어떤 줄의 플랫을 여러 개 누르고 있다면, 가장 높은 플랫의 음이 발생한다.
예를 들어, 3번 줄의 5번 플랫을 이미 누르고 있다고 하자. 이때, 7번 플랫을 누른 음을 연주하려면, 5번 플랫을 누르는 손을 떼지 않고 다른 손가락으로 7번 플랫을 누르고 줄을 튕기면 된다. 여기서 2번 플랫의 음을 연주하려고 한다면, 5번과 7번을 누르던 손가락을 뗀 다음에 2번 플랫을 누르고 연주해야 한다.
이렇게 손가락으로 플랫을 한 번 누르거나 떼는 것을 손가락을 한 번 움직였다고 한다. 어떤 멜로디가 주어졌을 때, 손가락의 가장 적게 움직이는 회수를 구하는 프로그램을 작성하시오.
입력 설명
첫째 줄에는 멜로디에 포함되어 있는 음의 수 N과 한 줄에 있는 플랫의 수 P가 주어진다. (N ≤ 500,000, 2 ≤ P ≤ 300,000)
다음 N개 줄에는 멜로디의 한 음을 나타내는 두 정수가 주어진다. 첫 번째 정수는 줄의 번호이고 두 번째 정수는 그 줄에서 눌러야 하는 플랫의 번호이다. 입력으로 주어진 음의 순서대로 기타를 연주해야 한다.
출력 설명
멜로디를 연주하는데 필요한 최소 손가락 움직임을 출력한다.
5 15
2 8
2 10
2 12
2 10
2 5
7 15
1 5
2 3
2 5
2 7
2 4
1 5
1 3