Submission #1230526

#TimeUsernameProblemLanguageResultExecution timeMemory
1230526ackerman2840Palembang Bridges (APIO15_bridge)Pypy 3
100 / 100
684 ms86028 KiB
from heapq import heappush, heappop

def cmp(a):
    return a[0] + a[1]

lpq = []  # max-heap using negatives
rpq = []  # min-heap
lsum = 0
rsum = 0

def insert(x):
    global lsum, rsum
    median = -lpq[0] if lpq else 1000000001
    if x <= median:
        heappush(lpq, -x)
        lsum += x
    else:
        heappush(rpq, x)
        rsum += x

    if len(rpq) + 1 < len(lpq):
        nxt = -heappop(lpq)
        heappush(rpq, nxt)
        lsum -= nxt
        rsum += nxt
    elif len(lpq) < len(rpq):
        nxt = heappop(rpq)
        heappush(lpq, -nxt)
        rsum -= nxt
        lsum += nxt

k, n = map(int, input().split())
same_side = 0
v = [(0, 0)]

for _ in range(n):
    a, x, b, y = input().split()
    x = int(x)
    y = int(y)
    if a == b:
        same_side += abs(x - y)
    else:
        v.append((x, y))

v.sort(key=cmp)
n = len(v) - 1
same_side += n

lsum = rsum = 0
pref = [0] * (n + 1)

for i in range(1, n + 1):
    insert(v[i][0])
    insert(v[i][1])
    pref[i] = rsum - lsum

ans = pref[n]

if k == 2:
    lpq.clear()
    rpq.clear()
    lsum = rsum = 0

    for i in range(n, 0, -1):
        insert(v[i][0])
        insert(v[i][1])
        ans = min(ans, rsum - lsum + pref[i - 1])

print(same_side + ans)

Compilation message (stdout)

Compiling 'bridge.py'...

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

=======
#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...