문제5055--보급

5055: 보급

[만든사람 : ]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

2차원 평면에 \(N\)개의 군사 기지가 있는 구역이 있다. 각 \(i\) 번째 부대의 위치는 좌표 \((X_i , Y_i)\)로 알려져 있다. 이 구역을 담당한 보급 부대는 모든 기지에 보급을 수행하려고 한다. 각 \(i\)번째 기지가 보급을 받을 수 있는 날짜는 \(A_i\)번째부터 \(B_i\)번째 날짜까지이다. 전쟁 중이라, 보급 부대는 병력이 전체적으로 왼쪽 위에서 오른쪽 아래로 내려가는 모양의 대열을 유지하면서 오른쪽 위 방향으로 전진해야 한다. 따라서, 아래 조건들이 모두 만족되도록 각 \(i\)번째 기지가 보급을 받을 날짜 \(V_i\)를 하루씩 지정해야 한다.


  • 모든 \(i\)에 대해 \(A_i \le V_i \le B_i\)이다.
  • 모든 \(i, j\)에 대해 \(X_i < X_j , Y_i < Y_j\) 인 경우 \(V_i < V_j\)라야 한다. 
  • 모든 \(i, j\)에 대해 \(i \ne j\) 이면 \(V_i \ne V_j\)라야 한다.


각 기지의 위치와 보급 받을 수 있는 날짜들의 범위를 입력으로 받아 조건을 만족하면서 모든 기지에 보급을 할 수 있는지 확인하는 프로그램을 작성하라.

아래 예는 6개의 기지가 있는 상황을 보여 준다. 각 점이 기지에 해당하며 점 오른쪽 위에 보급을 받을 수 있는 날짜 범위가 주어져 있다.

아래 그림은 위의 예에서 조건을 만족하도록 보급 날짜를 정한 예를 보여준다. 각 점 오른쪽 아래에 배정된 날짜가 표기되어 있다. 아래 그림의 곡선은 보급 부대의 대형이 2일째와 3일째 사이에 있을 수 있는 가능한 위치를 보여 준다.




입력 설명

첫 번째 줄에 기지의 개수 \(N\)이 주어진다.

다음 \(N\)개의 줄 중 \(i\)번째 줄에 기지의 정보 \(X_i , Y_i , A_i , B_i\)가 공백을 사이에 두고 주어진다

  • 주어지는 모든 수는 정수이다. 
  • \(1 \le N \le 250 000\)
  • \(1 \le A_i \le B_i \le N\)
  • \(1 \le X_i \le N\)
  • \(1 \le Y_i \le N\)
  • 모든 \(X_i\)는 서로 다르다. 즉 \(i \ne j\) 이면 \(X_i\ne X_j\)이다.
  • 모든 \(Y_i\)는 서로 다르다. 즉 \(i\ne j\) 이면 \(Y_i\ne Y_j\)이다.

  1. (13점) \(N \le 10. \)
  2. (18점) \(N \le 2 500. \)
  3. (22점) 모든 \(i\)에 대해 \(B_i = N\)이다. 
  4. (47점) 추가 제약 조건 없음

출력 설명

  보급 날짜 배정이 가능한 경우 첫 번째 줄에 YES를 출력한다. 다음 줄에 기지 번호 순서대로 배정된 날짜 들을 공백을 사이에 두고 출력한다. 

  보급 날짜 배정이 불가능한 경우 첫 번째 줄에 NO를 출력한다.

입력 예시 Copy

6
2 6 1 3
4 1 4 6
6 5 4 6
1 3 2 5
3 2 1 3
5 4 1 6

출력 예시 Copy

YES
3 4 6 2 1 5
 

게시판

작성자제목(댓글)
글이 없습니다.

출처/분류