Solution #92397d70-a389-4044-add4-92afe50b405a

failed

Score

0% (0/5)

Runtime

162μs

Delta

-100.0% vs parent

-100.0% vs best

Regression from parent

Solution Lineage

Current0%Regression from parent
7cbd604b80%Improved from parent
fc42ee8d0%Regression from parent
b0db196680%Same as parent
692ab45880%Same as parent
8996709780%Improved from parent
17dd25090%Regression from parent
2524a75f80%Same as parent
e8534c5f80%Same as parent
bc1ec94080%Same as parent
7630bd9e80%Same as parent
ae983b2480%Same as parent
8252644380%Same as parent
9db0fb8580%Improved from parent
df1d6fd340%Regression from parent
ae833bc280%Same as parent
c90b917a80%First in chain

Code

def solve(input):
    jobs = input.get("jobs", [])
    if not jobs:
        return 0

    jobs = sorted((tuple(job) for job in jobs), key=lambda x: x[1])

    def bisect_right(a, x, lo=0, hi=None):
        hi = len(a) if hi is None else hi
        while lo < hi:
            mid = (lo + hi) // 2
            if x < a[mid]:
                hi = mid
            else:
                lo = mid + 1
        return lo

    ends = [e for _, e, _ in jobs]
    prev = [bisect_right(ends, jobs[i][0], 0, i) for i in range(len(jobs))]

    def build_dp(i, dp):
        take = jobs[i][2] + dp[prev[i]]
        skip = dp[-1]
        return dp + [(take if take > skip else skip)]

    return __import__("functools").reduce(build_dp, range(len(jobs)), [0])[-1]