손님마다 서로 다른 도착 시각에 한 단위 시간 동안 머물 때, 성냥을 최대 K번 써서 가장 큰 빈 구간을 건너뛰어 불이 켜진 총 시간을 최소로 만든다.
보통5그리디정렬구간면접 대비아직 제출이 없습니다시간 제한1초메모리 제한256 MB지호의 방에는 난로가 하나 있다. 연료를 아끼려고 혼자 있을 때는 난로를 되도록 켜지 않지만, 방에 친구가 와 있는 동안에는 반드시 난로를 켜 둔다.
오늘은 친구 N명이 지호의 집에 온다. 친구를 구분하려고 1번부터 N번까지 번호를 붙였다. i번 친구는 시간 Ti에 도착해서 시간 Ti+1에 나간다. 방이 좁아서 한 번에 한 명만 들어올 수 있다. 즉 방에는 지호를 포함해 항상 두 명 이하만 있다.
난로는 아무 때나 켜고 끌 수 있다. 켜려면 성냥이 한 개 필요하고, 오늘 지호가 가진 성냥은 K개다. 따라서 난로를 켜는 횟수는 최대 K번이다. 처음에 난로는 꺼져 있다.
지호는 난로가 켜져 있는 시간을 최소로 하려고 한다. 친구들의 도착 시간과 성냥의 개수가 주어질 때, 난로가 켜져 있는 시간의 최솟값을 구하는 프로그램을 작성하시오.
첫째 줄에 지호의 집을 방문하는 친구의 수 N (1≤N≤105)과 지호가 가진 성냥의 개수 K (1≤K≤N)가 주어진다.
둘째 줄부터 N개 줄에 걸쳐 i번 친구의 도착 시간 Ti가 i가 커지는 순서대로 주어진다 (1≤Ti≤109). 두 친구가 같은 시간에 도착하는 경우는 없어서, 모든 1≤i≤N−1에 대해 Ti<Ti+1을 만족한다.
첫째 줄에 난로가 켜져 있는 시간의 최솟값을 출력한다.
한 친구가 나가는 시간과 다음 친구가 도착하는 시간이 같을 수 있다. 그 순간에 난로를 껐다가 다시 켜면 켜져 있는 시간은 그대로이고 성냥만 한 개 더 든다.
성냥이 N개면 친구가 도착할 때마다 난로를 켜고 나갈 때마다 끌 수 있다. 반대로 성냥이 한 개뿐이면 첫 친구가 도착하는 시간에 켜서 마지막 친구가 나가는 시간까지 계속 켜 두어야 한다.