Pagini recente » Cod sursa (job #3162805) | Cod sursa (job #2609863) | Cod sursa (job #1265651) | Cod sursa (job #1469798) | Cod sursa (job #2835283)
def scmax(n, t):
dp = []
last = [0 for i in range(n)]
def bins(val):
lft, rgt = 0, len(dp) - 1
while lft <= rgt:
mid = (lft + rgt) // 2
if val <= t[dp[mid]]:
rgt = mid - 1
else:
lft = mid + 1
return lft
for i in range(n):
pos = bins(t[i])
if pos == len(dp):
dp.append(i)
else:
dp[pos] = i
last[i] = dp[pos - 1] if pos else -1
i = dp[len(dp) - 1]
sol = []
while i != -1:
sol.append(t[i])
i = last[i]
sol.reverse()
return sol
with open("scmax.in", "r") as fin:
n = int(fin.readline())
t = [int(x) for x in fin.readline().split()]
sol = scmax(n, t)
with open("scmax.out", "w") as fout:
fout.write(f"{len(sol)}\n")
for x in sol:
fout.write(f"{x} ")
fout.write("\n")