보급
한국어
Language
Contribute a translation- Time limit
- 4000 ms
- Memory limit
- 1024 MB
- Submissions
- 1
- Correct
- 1
- Solved by
- 1
- AC rate
- 100.000%
Statement
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\neq j $ 이면 $ V_i \neq V_j $라야 한다.
각 기지의 위치와 보급 받을 수 있는 날짜들의 범위를 입력으로 받아 조건을 만족하면서 모든 기지에 보급을 할 수 있는지 확인하는 프로그램을 작성하라.
아래 예는 6개의 기지가 있는 상황을 보여 준다. 각 점이 기지에 해당하며 점 오른쪽 위에 보급을 받을 수 있는 날짜 범위가 주어져 있다.
아래 그림은 위의 예에서 조건을 만족하도록 보급 날짜를 정한 예를 보여준다. 각 점 오른쪽 아래에 배정된 날짜가 표기되어 있다. 아래 그림의 곡선은 보급 부대의 대형이 2일째와 3일째 사이에 있을 수 있는 가능한 위치를 보여 준다.
Constraints
- 주어지는 모든 수는 정수이다.
- $ 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\neq j $ 이면 $ X_i \neq X_j $이다.
- 모든 $ Y_i $는 서로 다르다. 즉 $ i\neq j $ 이면 $ Y_i \neq Y_j $이다.
Subtasks
- (13점) $ N \le 10 $.
- (18점) $ N \le 2\,500 $.
- (22점) 모든 $ i $에 대해 $ B_i = N $이다.
- (47점) 추가 제약 조건 없음.
Input
첫 번째 줄에 기지의 개수 $ N $이 주어진다.
다음 $ N $개의 줄 중 $ i $번째 줄에 기지의 정보 $ X_i $, $ Y_i $, $ A_i $, $ B_i $가 공백을 사이에 두고 주어진다.
Output
보급 날짜 배정이 가능한 경우 첫 번째 줄에 YES를 출력한다. 다음 줄에 기지 번호 순서대로 배정된 날짜들을 공백을 사이에 두고 출력한다.
보급 날짜 배정이 불가능한 경우 첫 번째 줄에 NO를 출력한다.
Examples
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
YES 3 4 6 2 1 5
2 1 1 2 2 2 2 1 1
NO