2020/04/08

[zerojudge] a091: 今晚打老虎

import sys, bisect
'''
你如果把每個值都塞到 list
list 太長造成每個 insert , sort , pop 都很耗時
可以用一個 dict 來記錄每個值出現的次數
'''
f = []   # 要維護的 list
d = {}   # 記錄每個值出現的次數
for s in sys.stdin:
    if(s == '2\n'): # Query MAX
        p = f[-1]
        print(p)   
        d[p] -= 1  
        if(d[p] == 0): f.pop()
        '''
        印出尾部最大值
        計數減一
        計數為零才 pop()
        '''
    elif(s == '3\n'): # Query MIN
        p = f[0]
        print(p)
        d[p] -= 1
        if(d[p] == 0): f.pop(0)
        '''
        印出頭部最小值
        計數減一
        計數為零才 pop(0)
        '''
    else: # Insert
        t = int(s.replace('1 ',''))
        if(d.__contains__(t)): d[t] += 1
        else: d[t] = 1
        '''
        計數不存在時設為 1
        反之加 1
        '''
        if(d[t] == 1):
            bisect.insort_left(f, t)
        '''    
        如為新成員才 insert
        利用 bisect.insort_left = insert and sort
        '''

沒有留言:

張貼留言