Submission #3451698


Source Code Expand

import sys
import math
import collections
import itertools
import array
import inspect
import bisect

# Set max recursion limit
sys.setrecursionlimit(1000000)


# Debug output
def chkprint(*args):
    names = {
        id(v): k
        for k, v in inspect.currentframe().f_back.f_locals.items()
    }
    print(', '.join(
        names.get(id(arg), '???') + ' = ' + repr(arg) for arg in args))


# Binary converter
def to_bin(x):
    return bin(x)[2:]


def li_input():
    return [int(_) for _ in input().split()]


def gcd(n, m):
    if n % m == 0:
        return m
    else:
        return gcd(m, n % m)


def gcd_list(L):
    v = L[0]

    for i in range(1, len(L)):
        v = gcd(v, L[i])

    return v


def lcm(n, m):
    return (n * m) // gcd(n, m)


def lcm_list(L):
    v = L[0]

    for i in range(1, len(L)):
        v = lcm(v, L[i])

    return v


# Width First Search (+ Distance)
def wfs_d(D, N, K):
    """
    D: 隣接行列(距離付き)
    N: ノード数
    K: 始点ノード
    """

    dfk = [-1] * (N + 1)
    dfk[K] = 0

    cps = [(K, 0)]
    r = [False] * (N + 1)
    r[K] = True
    while len(cps) != 0:
        n_cps = []
        for cp, cd in cps:
            for i, dfcp in enumerate(D[cp]):
                if dfcp != -1 and not r[i]:
                    dfk[i] = cd + dfcp
                    n_cps.append((i, cd + dfcp))
                    r[i] = True

        cps = n_cps[:]

    return dfk


# Depth First Search (+Distance)
def dfs_d(v, pre, dist):
    """
    v:  現在のノード
    pre: 1つ前のノード
    dist: 現在の距離

    以下は別途用意する
    D: 隣接リスト(行列ではない)
    D_dfs_d: dfs_d関数で用いる,始点ノードから見た距離リスト
    """

    global D
    global D_dfs_d

    D_dfs_d[v] = dist

    for next_v, d in D[v]:
        if next_v != pre:
            dfs_d(next_v, v, dist + d)

    return


def sigma(N):
    ans = 0
    for i in range(1, N + 1):
        ans += i
    return ans


def comb(n, r):
    if n - r < r: r = n - r
    if r == 0: return 1
    if r == 1: return n

    numerator = [n - r + k + 1 for k in range(r)]
    denominator = [k + 1 for k in range(r)]

    for p in range(2, r + 1):
        pivot = denominator[p - 1]
        if pivot > 1:
            offset = (n - r) % p
            for k in range(p - 1, r, p):
                numerator[k - offset] /= pivot
                denominator[k] /= pivot

    result = 1
    for k in range(r):
        if numerator[k] > 1:
            result *= int(numerator[k])

    return result

def bisearch(L, target):
    low = 0
    high = len(L) - 1
    
    while low <= high:
        mid = (low + high) // 2
        guess = L[mid]
        if guess == target:
            return True
        elif guess < target:
            low = mid + 1
        elif guess > target:
            high = mid - 1
    if guess != target:
        return False

# --------------------------------------------

dp = []


def main():
    global dp

    N = int(input())
    B = [li_input() for _ in range(N)]
    
    isin = collections.defaultdict(lambda: False)

    B = sorted(B, key=lambda x: x[0])

    A = []
    ai = -1

    for b in B:
        w, h = b

        if isin[w]:
            A[ai].append(h)
        else:
            ai += 1
            isin[w] = True
            A.append([])
            A[ai].append(h)

    H = []

    for a in A:
        for a_ in a:
            H.append(a_)

    dp.append(H[0])

    for h in H[1:]:
        i = bisect.bisect_left(dp, h)

        if i >= len(dp):
            dp.append(h)
        else:
            dp[i] = h

    print(len(dp))




main()

Submission Info

Submission Time
Task D - プレゼント
User Szarny
Language Python (3.4.3)
Score 30
Code Size 3862 Byte
Status WA
Exec Time 558 ms
Memory 43376 KB

Judge Result

Set Name Sample Subtask0 All
Score / Max Score 0 / 0 30 / 30 0 / 70
Status
AC × 4
AC × 19
AC × 30
WA × 4
Set Name Test Cases
Sample sample0.txt, sample1.txt, sample2.txt, sample3.txt
Subtask0 subtask0_0.txt, subtask0_1.txt, subtask0_10.txt, subtask0_11.txt, subtask0_12.txt, subtask0_13.txt, subtask0_14.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, sample0.txt, sample1.txt, sample2.txt, sample3.txt
All sample0.txt, sample1.txt, sample2.txt, sample3.txt, subtask0_0.txt, subtask0_1.txt, subtask0_10.txt, subtask0_11.txt, subtask0_12.txt, subtask0_13.txt, subtask0_14.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt
Case Name Status Exec Time Memory
sample0.txt AC 44 ms 4896 KB
sample1.txt AC 37 ms 4684 KB
sample2.txt AC 37 ms 4684 KB
sample3.txt AC 37 ms 4684 KB
subtask0_0.txt AC 38 ms 4768 KB
subtask0_1.txt AC 37 ms 4684 KB
subtask0_10.txt AC 41 ms 5024 KB
subtask0_11.txt AC 40 ms 4896 KB
subtask0_12.txt AC 41 ms 5024 KB
subtask0_13.txt AC 41 ms 4896 KB
subtask0_14.txt AC 41 ms 4896 KB
subtask0_2.txt AC 37 ms 4684 KB
subtask0_3.txt AC 37 ms 4684 KB
subtask0_4.txt AC 40 ms 4896 KB
subtask0_5.txt AC 36 ms 4684 KB
subtask0_6.txt AC 40 ms 4896 KB
subtask0_7.txt AC 40 ms 4896 KB
subtask0_8.txt AC 40 ms 4896 KB
subtask0_9.txt AC 38 ms 4768 KB
subtask1_0.txt AC 358 ms 25456 KB
subtask1_1.txt AC 44 ms 5272 KB
subtask1_10.txt AC 487 ms 43376 KB
subtask1_11.txt AC 478 ms 42608 KB
subtask1_12.txt AC 541 ms 34996 KB
subtask1_13.txt WA 538 ms 34992 KB
subtask1_14.txt WA 546 ms 34984 KB
subtask1_2.txt AC 108 ms 10396 KB
subtask1_3.txt WA 459 ms 31664 KB
subtask1_4.txt AC 558 ms 34828 KB
subtask1_5.txt WA 104 ms 9792 KB
subtask1_6.txt AC 403 ms 28512 KB
subtask1_7.txt AC 230 ms 18036 KB
subtask1_8.txt AC 482 ms 31824 KB
subtask1_9.txt AC 245 ms 19336 KB