提出 #32048295
ソースコード 拡げる
import bisect
from collections import defaultdict
# 順序付きSet(insertの使い分けによって重複有り/無しの使い分け可能)
class MultiSet:
def __init__(self):
self.total = 0 # Multi_setに含まれる要素数
self.ms = dict() # 各要素の個数カウント用
self.lr = [] # 要素の重複を排除した昇順リスト(一度追加されたものはdelete処理の後も残る)
# 重複を許さない挿入
def insert_unique(self, x):
if x in self.ms:
if self.ms[x] == 0:
self.ms[x] = 1
self.total += 1
else:
self.total += 1
self.ms[x] = 1
bisect.insort(self.lr, x)
# 重複を許す挿入
def insert_multi(self, x):
self.total += 1
if x in self.ms:
self.ms[x] += 1
else:
self.ms[x] = 1
bisect.insort(self.lr, x)
# 要素の存在判定(有り:1、無し:0をReturn)
def find(self, x):
return self.ms.get(x, 0)
# 要素の削除(重複を許している場合は値がxの要素を全て削除)
def delete(self, x):
if self.find(x) > 0:
self.total -= self.ms[x]
self.ms[x] = 0
del self.lr[self.lr.index(x)]
def delete_num(self, x, num):
if self.find(x) > 0:
if num >= self.ms[x]:
self.delete(x)
else:
self.total -= num
self.ms[x] -= num
def max_value(self):
return self.lr[-1]
def min_value(self):
return self.lr[0]
# 値がl以上r以下の要素を抽出したリストをReturn
def dump(self, l, r):
lb = bisect.bisect_left(self.lr, l)
ub = bisect.bisect_right(self.lr, r)
res = []
for i in range(lb, ub):
k = self.lr[i]
v = self.ms[k]
res += [k] * v
return res
"""
MS = MultiSet()
MS.insert_unique(x)
MS.insert_multi(x)
MS.find(x)
MS.delete(x)
MS.dump(l,r) # [l,r)
"""
MS = MultiSet()
count = defaultdict(int)
Q = int(input())
for _ in range(Q):
query = list(map(int, input().split()))
if query[0] == 1:
MS.insert_multi(query[1])
count[query[1]] += 1
elif query[0] == 2:
x = query[1]
num = query[2]
MS.delete_num(x, num)
else:
print(MS.max_value() - MS.min_value())
提出情報
| 提出日時 | |
|---|---|
| 問題 | C - Max - Min Query |
| ユーザ | gae1202 |
| 言語 | Python (3.8.2) |
| 得点 | 0 |
| コード長 | 2527 Byte |
| 結果 | RE |
| 実行時間 | 1126 ms |
| メモリ | 17580 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||||
|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 0 / 300 | ||||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_01.txt, 00_sample_02.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_killer_01.txt, 02_killer_02.txt, 02_killer_03.txt, 02_killer_04.txt, 02_killer_05.txt, 02_killer_06.txt, 02_killer_07.txt, 02_killer_08.txt, 02_killer_09.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_01.txt | AC | 22 ms | 9160 KiB |
| 00_sample_02.txt | AC | 19 ms | 9304 KiB |
| 01_random_01.txt | RE | 21 ms | 9184 KiB |
| 01_random_02.txt | RE | 24 ms | 9456 KiB |
| 01_random_03.txt | RE | 20 ms | 9184 KiB |
| 01_random_04.txt | RE | 23 ms | 9336 KiB |
| 01_random_05.txt | RE | 19 ms | 9452 KiB |
| 01_random_06.txt | RE | 24 ms | 9320 KiB |
| 01_random_07.txt | RE | 28 ms | 9512 KiB |
| 01_random_08.txt | RE | 25 ms | 9396 KiB |
| 01_random_09.txt | RE | 551 ms | 12988 KiB |
| 02_killer_01.txt | AC | 1126 ms | 17452 KiB |
| 02_killer_02.txt | AC | 1125 ms | 17308 KiB |
| 02_killer_03.txt | AC | 1117 ms | 17580 KiB |
| 02_killer_04.txt | AC | 489 ms | 9400 KiB |
| 02_killer_05.txt | AC | 487 ms | 9464 KiB |
| 02_killer_06.txt | AC | 488 ms | 9460 KiB |
| 02_killer_07.txt | AC | 479 ms | 9336 KiB |
| 02_killer_08.txt | AC | 481 ms | 9400 KiB |
| 02_killer_09.txt | AC | 478 ms | 9392 KiB |