提出 #25488092


ソースコード 拡げる

from heapq import heappop,heappush
from collections import defaultdict
class QuasiMultiset:

    def __init__(self,deleteFlag=True):
        '''
        deleteFlag: 要素数が0となったkeyを辞書から削除するか
        '''
        self.len = 0
        self.f = defaultdict(int)
        self.pos = []
        self.neg = []
        self.deleteFlag = deleteFlag

    def _delete(self,key):
        '''
        要素数が0となったkeyを辞書から削除
        内部呼び出し用
        '''
        if self.deleteFlag and self.f[key] == 0:
            del self.f[key]

    def add(self,x,key=None):
        '''
        x:追加する要素の値
        key:キー
        '''
        if key is None:
            key = x
        self.len += 1
        heappush(self.pos,(x,key))
        heappush(self.neg,(-x,key))
        self.f[key] += 1

    def popMax(self,returnKey=False):
        '''
        最大値とそのkey(optional)をpopする
        '''
        while True:
            x,key = heappop(self.neg)
            if self.f[key]:
                self.f[key] -= 1
                self.len -= 1
                self._delete(key)
                if returnKey:
                    return -x,key
                else:
                    return x

    def popMin(self,returnKey=False):
        '''
        最小値とそのkey(optional)をpopする
        '''
        while True:
            x,key = heappop(self.pos)
            if self.f[key]:
                self.f[key] -= 1
                self.len -= 1
                self._delete(key)
                if returnKey:
                    return x,key
                else:
                    return x
            
    def seachMax(self,returnKey=False):
        '''
        最大値とそのkey(optional)をreturnする
        '''
        while True:
            x,key = self.neg[0]
            if self.f[key]:
                if returnKey:
                    return -x,key
                else:
                    return -x
            else:
                heappop(self.neg)
    
    def seachMin(self,returnKey=False):
        '''
        最小値とそのkey(optional)をreturnする
        '''
        while True:
            x,key = self.pos[0]
            if self.f[key]:
                if returnKey:
                    return x,key
                else:
                    return x
            else:
                heappop(self.pos)

    def delete(self,key):
        '''
        key:削除するkey
        '''
        self.f[key] -= 1
        self._delete(key)
        self.len -= 1

    def exist(self,key):
        t = self.f.get(key)
        if t is None:
            return False
        else:
            if self.f[t]:
                return True
            else:
                return False
N = int(input())
mins = []
maxes = []
for i in range(N):
    x,y = sorted(map(int,input().split()))
    mins.append(x)
    maxes.append(y)

def solve1():
    return (max(mins)-min(mins))*(max(maxes)-min(maxes))

def solve2():
    ms = QuasiMultiset()
    d = max(maxes)-min(mins)
    mn = [(mins[i],i) for i in range(N)]
    mn.sort()
    for i in range(N):
        ms.add(mn[i][0])
    mi = ms.seachMax()-ms.seachMin()
    for i in range(N):
        x,idx = mn[i]
        ms.delete(x)
        ms.add(maxes[idx])
        mi = min(mi,ms.seachMax()-ms.seachMin())
    return (max(maxes)-min(mins))*mi

print(min(solve1(),solve2()))

提出情報

提出日時
問題 E - Ball Coloring
ユーザ mymelochan
言語 PyPy3 (7.3.0)
得点 700
コード長 3567 Byte
結果 AC
実行時間 1114 ms
メモリ 230040 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 3
AC × 35
セット名 テストケース
Sample example0, example1, example2
All div20, div21, div22, div23, div24, example0, example1, example2, maxrand0, maxrand1, maxrand2, maxrand20, maxrand21, maxrand210, maxrand211, maxrand22, maxrand23, maxrand24, maxrand25, maxrand26, maxrand27, maxrand28, maxrand29, maxrand3, maxrand4, smallrand0, smallrand1, smallrand2, smallrand3, smallrand4, sparse0, sparse1, sparse2, sparse3, sparse4
ケース名 結果 実行時間 メモリ
div20 AC 1091 ms 228696 KiB
div21 AC 1080 ms 230040 KiB
div22 AC 1076 ms 228864 KiB
div23 AC 1074 ms 229036 KiB
div24 AC 1114 ms 228728 KiB
example0 AC 66 ms 65456 KiB
example1 AC 52 ms 65764 KiB
example2 AC 53 ms 65576 KiB
maxrand0 AC 1058 ms 228644 KiB
maxrand1 AC 1069 ms 228724 KiB
maxrand2 AC 1069 ms 229484 KiB
maxrand20 AC 855 ms 203832 KiB
maxrand21 AC 923 ms 205628 KiB
maxrand210 AC 737 ms 194140 KiB
maxrand211 AC 895 ms 200132 KiB
maxrand22 AC 888 ms 201368 KiB
maxrand23 AC 961 ms 201172 KiB
maxrand24 AC 1103 ms 216984 KiB
maxrand25 AC 894 ms 205636 KiB
maxrand26 AC 864 ms 199584 KiB
maxrand27 AC 948 ms 199424 KiB
maxrand28 AC 1032 ms 206300 KiB
maxrand29 AC 1088 ms 219048 KiB
maxrand3 AC 1085 ms 229464 KiB
maxrand4 AC 1077 ms 229984 KiB
smallrand0 AC 67 ms 65696 KiB
smallrand1 AC 49 ms 65708 KiB
smallrand2 AC 50 ms 65720 KiB
smallrand3 AC 56 ms 65760 KiB
smallrand4 AC 55 ms 65620 KiB
sparse0 AC 810 ms 173564 KiB
sparse1 AC 814 ms 173480 KiB
sparse2 AC 809 ms 170708 KiB
sparse3 AC 811 ms 171664 KiB
sparse4 AC 830 ms 171272 KiB