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

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

직사각형 시트의 합집합 넓이와 둘레

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

요약
좌표가 0부터 10000 사이인 정수이고 변이 축에 평행한 직사각형이 최대 10000개 주어질 때, 겹치는 부분을 한 번만 세어 합집합의 넓이를 구하고 r=2이면 둘레도 구한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 정렬, 누적 합, 기하
정답자
아직 제출이 없습니다

문제

평면 위에 직사각형 모양의 시트가 여러 장 놓여 있다. 이 시트들로 덮인 영역의 넓이 또는 둘레 길이를 구하는 프로그램을 작성하여라.

평면을 좌표평면으로 볼 때, 시트의 배치는 다음 두 조건을 만족한다.

  1. 각 시트(직사각형)의 네 꼭짓점의 xx, yy 좌표는 모두 00 이상 1000010000 이하의 정수이며, 직사각형의 각 변은 xx축 또는 yy축에 평행하다.
  2. 시트의 개수는 최대 1000010000장이다.

여러 시트는 서로 겹칠 수 있으며, 겹친 부분의 넓이는 한 번만 센다. 둘레 길이는 덮인 영역 전체 경계의 총 길이이며, 영역 내부에 생기는 구멍의 경계도 포함한다.

입력

첫째 줄에 직사각형의 개수 nn과 질의의 종류를 나타내는 정수 rr가 공백으로 구분되어 주어진다. 둘째 줄부터 nn개의 줄에 걸쳐, 각 시트의 왼쪽 아래 꼭짓점 좌표 (x1,y1)(x_1, y_1)과 오른쪽 위 꼭짓점 좌표 (x2,y2)(x_2, y_2)가 x1x_1, y1y_1, x2x_2, y2y_2의 순서로 공백으로 구분되어 주어진다.

출력

r=1r = 1이면 첫째 줄에 덮인 영역의 넓이를 출력한다. r=2r = 2이면 첫째 줄에 넓이를, 둘째 줄에 둘레의 길이를 출력한다. 어느 경우든 마지막에 개행 문자를 출력한다.

예제4

  1. 예제 1

    입력
    5 1
    0 0 3 2
    1 1 2 5
    0 4 6 5
    3 3 5 6
    5 0 7 6
    
    예상 출력
    29
    
  2. 예제 2

    입력
    5 2
    0 0 3 2
    1 1 2 5
    0 4 6 5
    3 3 5 6
    5 0 7 6
    
    예상 출력
    29
    38
    
  3. 예제 3

    입력
    2 2
    0 0 8 9
    0 0 9 8
    
    예상 출력
    80
    36
    
  4. 예제 4

    입력
    3 2
    2 2 8 8
    3 0 4 9
    5 0 7 9
    
    예상 출력
    45
    36