아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

디스크 최적화

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

요약
여러 블록에 흩어진 파일들이 놓인 디스크에서 복사와 교환만 사용해 파일들을 번호 순서대로 연속된 영역에 모으는 최소 시간을 구한다.
난이도

어려움10점 중 8점

유형
정렬, 그리디, 구현
정답자
아직 제출이 없습니다

문제

디스크에는 11번부터 NN번까지 번호가 매겨진 NN개의 섹터가 있다. 블록은 번호가 연속된 섹터들의 비어 있지 않은 구간이고, 블록의 길이는 그 안에 든 섹터의 수이다. 두 블록이 공통 섹터를 갖지 않으면 서로 분리되어 있다고 한다.

디스크에는 여러 파일이 저장된다. 한 파일은 여러 섹터에 나뉘어 저장될 수 있으며, 그 섹터들이 하나의 블록을 이루지 않아도 된다. 파일의 내용은 정해진 순서대로 섹터를 읽어 이어 붙인 것이고, 각 블록 안에서는 섹터 번호가 커지는 순서로 읽는다.

파일의 배치는 (시작 섹터, 블록 길이) 쌍의 나열로 주어진다. 예를 들어 다음 나열은

7 3
2 1
5 2

파일 내용을 섹터 7, 8, 9, 그다음 2, 그다음 5, 6의 순서로 읽는다는 뜻이다.

모든 섹터는 비어 있거나, 정확히 하나의 파일의 일부를 담는다. 각 파일은 11부터 PP까지의 서로 다른 정수 번호로 구분되고, PP는 파일의 개수이다.

다음 세 조건이 모두 성립할 때 디스크가 최적화되어 있다고 한다.

  • 각 파일이 하나의 블록(연속된 섹터)에 저장되어 있다,
  • 번호가 작은 파일이 번호가 큰 모든 파일보다 낮은 번호의 섹터를 차지한다,
  • 비어 있는 모든 섹터의 번호가 사용 중인 모든 섹터의 번호보다 크다.

다음 두 연산을 사용할 수 있다.

  • 복사: 한 블록의 내용을 같은 길이의 분리된 블록으로 복사한다. 길이가 tt인 블록을 복사하는 데 tt마이크로초가 걸린다,
  • 교환: 같은 길이의 분리된 두 블록의 내용을 서로 바꾼다. 길이가 tt인 두 블록을 교환하는 데 2t2t마이크로초가 걸린다.

처음 배치가 주어질 때, 디스크를 최적화 상태로 만드는 데 필요한 최소 총 시간을 마이크로초 단위로 구하여라. 이미 최적화되어 있으면 답은 00이다.

입력

첫 줄에 두 정수, 섹터 수 NN (N≤10000N \le 10000)과 파일 수 PP가 주어진다.

이어서 각 파일의 배치가 주어진다. 각 파일의 설명은 그 파일의 번호(11부터 PP까지)와 그 파일이 저장된 분리된 블록의 개수가 적힌 줄로 시작한다. 다음 줄들에는 블록이 파일의 읽는 순서대로 한 줄에 (시작 섹터, 길이) 쌍 하나씩 나열된다.

한 줄의 모든 수는 공백 하나로 구분되고, 입력은 항상 올바른 형식으로 주어진다.

출력

디스크를 최적화하는 데 필요한 최소 총 시간을 마이크로초 단위의 정수 하나로 출력한다(이미 최적화되어 있으면 00을 출력한다).

예제3

  1. 예제 1

    입력
    200 2
    2 2
    51 10
    41 10
    1 2
    71 20
    11 20
    
    예상 출력
    60
    
  2. 예제 2

    입력
    5 2
    1 1
    2 1
    2 1
    1 1
    
    예상 출력
    2
    
  3. 예제 3

    입력
    10 1
    1 1
    5 1
    
    예상 출력
    1