complete 2568.py
This commit is contained in:
53
zeta_python/completed/2568.py
Normal file
53
zeta_python/completed/2568.py
Normal file
@@ -0,0 +1,53 @@
|
||||
from bisect import bisect_left
|
||||
|
||||
|
||||
# LIS
|
||||
def solve(N: int, I: list[tuple[int, int]]) -> tuple[int, list]:
|
||||
left = []
|
||||
right = []
|
||||
D = []
|
||||
L = []
|
||||
R = []
|
||||
I = sorted(I, key=lambda x: x[0])
|
||||
for l, r in I:
|
||||
left.append(l)
|
||||
right.append(r)
|
||||
|
||||
L.append(right[0])
|
||||
D.append(left[0])
|
||||
R.append((0, 0))
|
||||
for i in range(1, N):
|
||||
pos = bisect_left(L, right[i])
|
||||
if pos >= len(L):
|
||||
L.append(right[i])
|
||||
D.append(left[i])
|
||||
else:
|
||||
L[pos] = right[i]
|
||||
D[pos] = left[i]
|
||||
R.append((pos, i))
|
||||
|
||||
target = len(L) - 1
|
||||
FL = []
|
||||
for i, j in R[::-1]:
|
||||
if i == target:
|
||||
FL.append(left[j])
|
||||
target -= 1
|
||||
|
||||
return N - len(L), set(left).difference(set(FL))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
N = int(input())
|
||||
I = [tuple(map(int, input().split())) for _ in range(N)]
|
||||
|
||||
cnt, L = solve(N, I)
|
||||
print(cnt)
|
||||
[print(i) for i in L]
|
||||
|
||||
|
||||
# 1 2 3 4 6 7 9 10
|
||||
# 8 2 9 1 4 6 7 10
|
||||
# 1 1 2 1 2 3 4 5
|
||||
|
||||
# 1 1 2 1 2 3
|
||||
# 8 2 9 1 4 6
|
||||
Reference in New Issue
Block a user