1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  | # 더 많은 정보는 42jerrykim.github.io 에서 확인하세요.
# 참고: 본 문제의 핵심은 "현재 x에 의존하는 순서"를 유지하는 균형 BST가 필요합니다.
# 파이썬 표준 라이브러리만으로는 비교자가 동적으로 변하는 정렬 집합을 직접 제공하지 않으므로
# 실전 제출은 C++ 권장입니다. 아래는 로직 스켈레톤입니다.
import sys
input = sys.stdin.readline
def solve():
    N = int(input())
    segs = []
    for _ in range(N):
        x1, y1, x2, y2 = map(int, input().split())
        if x1 < x2:
            xl, yl, xr, yr = x1, y1, x2, y2
        else:
            xl, yl, xr, yr = x2, y2, x1, y1
        low_x, low_y = (xl, yl) if yl <= yr else (xr, yr)
        segs.append((xl, yl, xr, yr, low_x, low_y))
    x0 = int(input())
    # 이벤트 생성: (x, type, id) — type: 0 insert, 1 lowpoint, 2 start, 3 remove
    events = []
    for i, (xl, yl, xr, yr, low_x, low_y) in enumerate(segs):
        events.append((xl, 0, i))
        events.append((low_x, 1, i))
        events.append((xr, 3, i))
    events.append((x0, 2, -1))
    events.sort()
    # 실제 제출은 C++ 구현 권장.
    # 여기서는 알고리즘 개요만 유지합니다.
    print(x0)
if __name__ == "__main__":
    solve()
  |