Submission #1309336

#TimeUsernameProblemLanguageResultExecution timeMemory
1309336yyrtcGlobal Warming (CEOI18_glo)Pypy 3
0 / 100
680 ms116460 KiB
import sys
import threading
def solve():
    input = sys.stdin.readline

    n, x = map(int, input().split())
    t = list(map(int, input().split()))

    # ---------- Coordinate compression ----------
    vals = sorted(set(t))
    comp = {v: i+1 for i, v in enumerate(vals)}
    m = len(vals)

    a = [comp[v] for v in t]

    # ---------- Fenwick Tree (max) ----------
    class Fenwick:
        def __init__(self, n):
            self.n = n
            self.bit = [0] * (n + 1)

        def update(self, i, v):
            while i <= self.n:
                self.bit[i] = max(self.bit[i], v)
                i += i & -i

        def query(self, i):
            res = 0
            while i > 0:
                res = max(res, self.bit[i])
                i -= i & -i
            return res

    # ---------- LIS from left ----------
    L = [0] * n
    fw = Fenwick(m)
    for i in range(n):
        L[i] = fw.query(a[i] - 1) + 1
        fw.update(a[i], L[i])

    # ---------- LIS from right ----------
    R = [0] * n
    fw = Fenwick(m)
    for i in range(n-1, -1, -1):
        R[i] = fw.query(m - a[i]) + 1
        fw.update(m - a[i] + 1, R[i])

    # ---------- Answer without modification ----------
    ans = max(L)

    # ---------- Main trick: allow one shifted segment ----------
    # Prepare pairs (value, R[i])
    pairs = list(zip(t, R))
    pairs.sort()

    fw = Fenwick(m)

    j = 0
    for i in range(n):
        # Add all suffix elements with value <= t[i] + 2x
        while j < n and pairs[j][0] <= t[i] + 2 * x:
            fw.update(comp[pairs[j][0]], pairs[j][1])
            j += 1

        best_suffix = fw.query(m)
        ans = max(ans, L[i] + best_suffix)

    print(ans)

if __name__ == "__main__":
    solve()

Compilation message (stdout)

Compiling 'glo.py'...

=======
  adding: __main__.pyc (deflated 46%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...