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

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

지역 간 올림피아드

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

요약
각 문제가 s_i 시각에 등장하고 풀이에 t_i분이 걸리며 c_i점을 주는 상황에서, 겹치지 않게 풀 수 있는 문제 부분집합의 최대 점수와 그 문제 번호를 순서대로 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 그리디, 정렬, 구간
정답자
아직 제출이 없습니다

문제

로봇 프로그래밍 지역 간 올림피아드에서는 대회가 단일 라운드로, 색다른 형식으로 진행된다. 참가자들에게 문제는 라운드 시작 시 한꺼번에 주어지지 않고 순차적으로 배포되며, ii번째 문제 (1≤i≤n1 \le i \le n)는 각자의 시각 sis_i에 참가자들이 이용할 수 있게 된다. 다음 문제가 배포되면 각 참가자는 그 문제를 풀지 말지를 즉시 결정해야 한다. 이 문제를 풀기로 선택하면 tit_i분 안에 풀이를 제출해야 하며, 그동안 다른 문제로 전환할 수 없다. 이 문제를 포기하면 나중에 다시 돌아올 수 없다. 참가자가 풀고 있는 문제에 주어진 시간이 끝난 순간, 같은 시각에 이용 가능해진 다른 문제가 있으면 그 문제를 풀기 시작할 수 있고, 아니면 다른 문제가 나타날 때까지 기다릴 수 있다. ii번째 문제를 올바르게 풀면 참가자는 cic_i점을 얻는다.

지역 인공지능 센터 중 한 곳을 대표해 이 올림피아드에 나가는 아르투르는 이런 대회에서 문제를 푸는 능력뿐만 아니라 어떤 문제를 풀고 어떤 문제를 건너뛸지에 대한 전략적 계산도 중요한 역할을 한다는 것을 알고 있다. 그는 다른 참가자들과 마찬가지로 라운드 시작 전에 각 문제가 언제 이용 가능해지는지, 풀이에 얼마의 시간이 주어지는지, 풀면 몇 점을 얻을 수 있는지를 알고 있다. 아르투르는 재능 있는 학생이라 올림피아드에서 풀기로 선택한 어떤 문제든 주어진 시간 안에 성공적으로 풀어 제출할 수 있다.

아르투르가 풀 문제를 최적으로 선택했을 때 얻을 수 있는 최대 점수와, 그때 풀어야 하는 문제의 개수 및 목록을 구하는 프로그램을 작성해야 한다.

입력

입력 파일의 첫째 줄에는 올림피아드의 문제 수를 나타내는 정수 nn (1≤n≤100 0001 \le n \le 100\,000)이 주어진다.

다음 nn개 줄에는 문제의 설명이 각 줄에 세 개의 수로 주어진다. sis_i는 ii번째 문제가 나타나는 시각(분), tit_i는 그 문제를 푸는 데 주어진 시간(분), cic_i는 그 문제를 풀었을 때 참가자가 받는 점수이다 (1≤si,ti,ci≤1091 \le s_i, t_i, c_i \le 10^9).

출력

출력 파일의 첫째 줄에는 아르투르가 올림피아드에서 얻을 수 있는 최대 점수를 나타내는 수가 있어야 한다.

둘째 줄에는 최적의 선택에서 풀어야 하는 문제의 개수 mm이 정수로 주어진다.

셋째 줄에는 그 문제들의 번호 mm개가 푸는 순서대로 공백으로 구분되어 주어진다. 문제는 입력 파일에 설명된 순서대로 1부터 번호가 매겨진다.

최적의 답이 여러 개라면 그중 아무거나 출력해도 된다.

힌트

첫 번째 예시에서 아르투르는 모든 문제를 제때 풀어 3점을 얻는다.

두 번째 예시에서 아르투르는 처음 두 문제만 풀어 2점을 얻는 것보다 마지막 문제를 풀어 3점을 얻는 편이 이득이다.

예제2

  1. 예제 1

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

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