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

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

Робот

면접 대비

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

요약
각 작업에 마감일과 지연 벌금이 주어질 때, 하루에 하나씩 수행해 총 벌금이 최소가 되는 일정을 구하고 최적 배정을 출력한다.
난이도

보통10점 중 6점

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

문제

Робот должен выполнить nn заданий.

Робот начинает работать в первый день и каждый день может выполнить ровно одну работу. Про каждую работу известен последний день, когда ее можно выполнить и d_id\_i, и штраф w_iw\_i, который придется заплатить, если работа не будет выполнена в срок.

Помогите роботу решить, в каком порядке выполнять работы, чтобы суммарный штраф был как можно меньше.

Например, если есть 3 работы, первую необходимо выполнить в первый день и штраф за невыполнение 2, вторую также необходимо выполнить в первый день и штраф за невыполнение 3, а третью необходимо выполнить не позже третьего дня и штраф за невыполнение 1, то оптимально выполнить сначала вторую, потом третью, а затем первую работу. В этом случае не в срок выполнено только первая работа и штраф составляет 2. Выполнить одновременно первую и вторую работу в срок невозможно.

입력

В первой строке дано единственное натуральное число nn (1≤n≤200,0001 \le n \le 200\\,000) --- количество работ.

Затем следует nn строк, в каждой из которых содержится по два числа d_id\_i и w_iw\_i (1≤d_i≤200,0001 \le d\_i \le 200\\,000, 1≤w_i≤200,0001 \le w\_i \le 200\\,000) --- последний день, когда можно выполнить работу без штрафа и стоимость опоздания для ii-й работы.

출력

В первой строке выведите единственное число, равное минимальной возможному суммарному штрафу. Во второй строке через пробел выведите nn чисел, где ii-е число --- день, в который необходимо выполнить ii-ю работу.

Если возможно несколько оптимальных расписаний, выведите любое из них.

힌트

В приведенном робот выполняет в срок вторую и третью работы, а первую выполняет лишь во второй день. Поэтому ему приходится уплатить штраф величиной 2.

예제1

  1. 예제 1

    입력
    3
    1 2
    1 3
    3 1
    
    예상 출력
    2
    3 1 2