A, B, C, D = map(int, input().split())
# if A <= D <= B or A <= C <= B: # NG
if A <= D <= B or A <= C <= B or C <= A <= D:
print("Yes")
else:
print("No")
落ち着いて考えるとこう
python
A, B, C, D = map(int, input().split())
if D < A or B < C:
print("No")
else:
print("Yes")
def solve(N, K, AS):
count = [0] * 300_000
count[AS[0]] = 1
for i in range(1, N):
A = AS[i]
start = max(0, A - K)
best = max(count[start:A + K + 1])
count[A] = best + 1
return max(count)
点更新範囲maxなのでセグメント木が使える
セグメント木バージョン AC
python
def solve(N, K, AS):
MAX_CAPACITY = 300_000
set_width(MAX_CAPACITY + 10)
count = [0] * SEGTREE_SIZE
point_set(count, AS[0], 1, max)
for i in range(1, N):
A = AS[i]
start = max(0, A - K)
end = min(A + K + 1, MAX_CAPACITY + 1)
best = range_reduce(count, start, end, max, -INF)
point_set(count, A, best + 1, max)
return range_reduce(count, 0, MAX_CAPACITY + 1, max, -INF)