Cod sursa(job #2835283)

Utilizator CharacterMeCharacter Me CharacterMe Data 18 ianuarie 2022 14:07:44
Problema Subsir crescator maximal Scor 80
Compilator py Status done
Runda Arhiva educationala Marime 0.92 kb
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")