만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

빨래 말리기

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

요약
각 시트를 한쪽 줄에 걸거나(느린 시간) 두 줄에 걸어(빠른 시간) 말리는 경우를 고르고, 줄 길이마다 모든 시트를 말리는 최소 시간을 구합니다. 불가능하면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 정렬, 이분 탐색
정답자
아직 제출이 없습니다

문제

해리 비버는 호텔을 운영하며, 관광 시즌이 끝날 때까지 남은 QQ주 동안 매주 일요일 밤에 침대 시트를 빨아야 한다. jj주차에 그는 방금 세탁한 침대 시트 NN장을 길이가 각각 LjL_j인 평행한 빨랫줄 두 개에 널어 말리려 한다. 시트는 옆으로 이어서 걸 수 있지만 서로 겹치면 안 된다. 각 시트는 폭이 did_i이고 길이가 길어서, 항상 줄 위에서 did_i만큼의 길이를 차지하도록 방향을 맞춰 건다. 시트마다 재질이 달라 건조 시간이 크기와 무관하다. ii번째 시트는 한 줄에만 걸면 tislowt^{\text{slow}}_i분이 걸리고, 두 줄에 동시에 걸면 tifastt^{\text{fast}}_i분 만에 마른다. 다만 두 줄에 걸친 시트는 다른 줄의 공간도 차지한다. 해리는 일요일에 가능한 한 빨리 자고 싶어 한다. 모든 시트는 세탁 직후 바로 말리기 시작해야 하므로 모두 동시에 널어야 한다. 각 주차의 최소 건조 시간을 구하고, 그 주에 모두 말리는 것이 불가능하면 그 사실을 알려 준다.

입력

첫째 줄에 시트의 수 NN과 관광 시즌이 끝날 때까지 남은 주의 수 QQ가 주어진다. 다음 NN개 줄에는 각각 시트의 폭 did_i, 짧은 건조 시간 tifastt^{\text{fast}}_i, 긴 건조 시간 tislowt^{\text{slow}}_i가 공백으로 구분되어 주어진다. 마지막 QQ개 줄에는 각 주차의 빨랫줄 길이 LjL_j가 한 줄에 하나씩 주어진다.

출력

QQ개의 줄을 출력한다. jj번째 줄에는 jj주차에 필요한 최소 건조 시간을 출력한다. 그 주에 시트를 모두 말리는 것이 불가능하면 -1을 출력한다. 최소 건조 시간이 일주일의 분 수보다 길더라도 -1로 바꾸지 말고 그 값을 그대로 출력한다.

제한

  • 1≤N≤3⋅1041 \leq N \leq 3 \cdot 10^4
  • 1≤Q≤3⋅1051 \leq Q \leq 3 \cdot 10^5
  • 모든 1≤i≤N1 \leq i \leq N에 대해 1≤di≤3⋅1051 \leq d_i \leq 3 \cdot 10^5
  • 모든 1≤i≤N1 \leq i \leq N에 대해 1≤tifast≤tislow≤1091 \leq t^{\text{fast}}_i \leq t^{\text{slow}}_i \leq 10^9
  • 모든 1≤j≤Q1 \leq j \leq Q에 대해 1≤Lj≤3⋅1051 \leq L_j \leq 3 \cdot 10^5

예제1

  1. 예제 1

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