EDF

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

요약
미리 주어진 N개의 작업과 도중에 추가되는 M개의 작업을 마감 시각이 이른 순서로 선점형으로 처리할 때 모든 작업을 마감 안에 끝낼 수 있는지 판정한다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 그리디, 힙, 정렬
정답자
아직 제출이 없습니다

문제

민구는 이번 년도에 일이 너무 많아서 NN개의 작업이 쌓여있으며, 시간이 흐르면서 최대 MM개의 작업이 추가된다.

기존에 있던 작업은 작업에 필요한 시간 t_it\_i와 마감 시각 d_id\_i가 주어지고, 추가되는 작업은 추가되는 시각 w_jw\_j, 작업에 필요한 시간 t_jt\_j, 마감 시각 d_jd\_j가 주어진다.

민구는 각 작업에 대해서 마감 시각이 가장 가까운 작업부터 시작하는데, 작업 도중 새로 추가된 작업의 마감 시각이 더 이를 경우 새로 추가된 작업을 한다. 기존에 하던 작업은 나중에 다시 이어서 할 수 있도록 작업에 필요한 시간이 작업을 했던 시간만큼 차감된다.

예를 들어, 작업에 필요한 시간이 20분인 작업을 15분 동안 하다가 다른 작업으로 교체했을 경우, 기존에 하던 작업은 추후 5분만 추가적으로 작업을 하면 완료할 수 있다.

마감 시각이 같은 작업들에 대해서는 작업에 필요한 시간이 더 적게 남아있는 작업을 먼저 한다.

위 과정을 통해 총 N+MN + M개의 작업에 대해서 민구가 모든 작업을 완료할 수 있는지 알려주자.

민구는 한 가지 일에 집중하는 스타일이기에 한 번에 하나의 작업밖에 못한다. 또한 N+MN + M개의 작업을 모두 완료할 때까지 작업을 한다.

현재 시각은 00초이다.

입력

첫 번째 줄에 작업의 개수 NN이 주어진다. (1≤N≤105)(1 \le N \le 10^5)

다음 NN개의 줄에 각 작업의 걸리는 시간 t_it\_i, 마감 시각 d_id\_i이 주어진다. (0≤t_i≤109;1≤d_i≤109;t_i≤d_i)(0 \le t\_i \le 10^9; 1 \le d\_i \le 10^9; t\_i \le d\_i)

이후 N+2N + 2번째 줄에 작업 도중 추가될 작업의 개수 MM이 주어진다. (1≤M≤N)(1 \le M \le N)

다음 MM개의 줄에 각 작업의 추가되는 시각 w_jw\_j, 걸리는 시간 t_jt\_j, 마감 시각 d_jd\_j가 주어진다. (0≤t_j≤109;1≤w_j,d_j≤109;w_j+t_j≤d_j)(0 \le t\_j \le 10^9; 1 \le w\_j, d\_j \le 10^9; w\_j + t\_j \le d\_j)

출력

첫 번째 줄에 민구가 작업을 모두 완료하지 못 한다면 NO를 출력하고, 작업을 모두 완료할 수 있다면 YES를 출력한다.

만약 작업을 모두 완료할 수 있다면, 두 번째 줄에 모든 작업을 완료하는 최소 시각을 출력한다.

예제2

  1. 예제 1

    입력
    3
    10 30
    5 25
    10 35
    2
    5 10 45
    20 5 30
    
    예상 출력
    YES
    40
    
  2. 예제 2

    입력
    3
    10 30
    5 25
    15 35
    2
    5 10 40
    20 5 30
    
    예상 출력
    NO