結果
| 問題 |
No.1705 Mode of long array
|
| コンテスト | |
| ユーザー |
puzneko
|
| 提出日時 | 2021-10-30 00:51:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 570 ms / 3,000 ms |
| コード長 | 1,927 bytes |
| コンパイル時間 | 259 ms |
| コンパイル使用メモリ | 82,208 KB |
| 実行使用メモリ | 200,320 KB |
| 最終ジャッジ日時 | 2024-10-07 13:15:45 |
| 合計ジャッジ時間 | 21,741 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 51 |
ソースコード
from sys import stdin
import heapq
d = dict()
class HeapDict:
def __init__(self):
self.h=[]
self.d=dict()
def insert(self,x):
heapq.heappush(self.h,x)
if x not in self.d:
self.d[x]=1
else:
self.d[x]+=1
def erase(self,x):
if x not in self.d or self.d[x]==0:
print(x,"is not in HeapDict")
exit()
else:
self.d[x]-=1
while len(self.h)!=0:
if self.d[self.h[0]]==0:
heapq.heappop(self.h)
else:
break
def is_exist(self,x):
if x in self.d and self.d[x]!=0:
return True
else:
return False
def is_empty(self):
if self.h:
return False
else:
return True
def get_min(self):
return self.h[0]
n, m, *indata = map(int, stdin.read().split())
numlist = [0 for i in range(m+1)]
numset = HeapDict()
for i in range(m):
a = indata[i]
numlist[i+1] = a
if not (numset.is_exist(-a)):
d[-a] = HeapDict()
d[-a].insert(-i-1)
numset.insert(-a)
q = indata[m]
offset = m+1
for i in range(q):
t, x, y = indata[offset + 3*i],indata[offset + 3*i+1],indata[offset + 3*i+2]
if t == 1:
kari = numlist[x]
d[-kari].erase(-x)
numset.erase(-kari)
kari += y
numlist[x] += y
if not (numset.is_exist(-kari)):
d[-kari] = HeapDict()
numset.insert(-kari)
d[-kari].insert(-x)
elif t == 2:
kari = numlist[x]
d[-kari].erase(-x)
numset.erase(-kari)
kari -= y
numlist[x] -= y
if not (numset.is_exist(-kari)):
d[-kari] = HeapDict()
numset.insert(-kari)
d[-kari].insert(-x)
else:
maxnum = numset.get_min()
ans = - d[maxnum].get_min()
print("{}".format(ans))
puzneko