結果
| 問題 |
No.649 ここでちょっとQK!
|
| コンテスト | |
| ユーザー |
toyuzuko
|
| 提出日時 | 2020-03-20 17:35:32 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 466 ms / 3,000 ms |
| コード長 | 1,844 bytes |
| コンパイル時間 | 404 ms |
| コンパイル使用メモリ | 82,440 KB |
| 実行使用メモリ | 167,356 KB |
| 最終ジャッジ日時 | 2024-12-14 11:22:24 |
| 合計ジャッジ時間 | 11,480 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
class Set(): #BinaryIndexedTree
def __init__(self, valuelist):
self.n = len(valuelist)
self.value = sorted(valuelist)
self.comp = {v : k for k, v in enumerate(self.value, 1)}
self.bit = BinaryIndexedTree(self.n)
def insert(self, x, k=1):
self.bit.add(self.comp[x], k)
def delete(self, x, k=1):
self.bit.add(self.comp[x], -k)
def count(self, x):
return self.bit.get(self.comp[x])
def get(self, k):
return self.value[self.bit.bisect_left(k)-1]
class BinaryIndexedTree(): #1-indexed
def __init__(self, n):
self.n = n
self.tree = [0 for _ in range(n + 1)]
def sum(self, index):
res = 0
while index:
res += self.tree[index]
index -= index & -index
return res
def get(self, index):
return self.sum(index) - self.sum(index - 1)
def add(self, index, x):
while index <= self.n:
self.tree[index] += x
index += index & -index
def bisect_left(self, x):
if x <= 0: return 0
res, tmp = 0, 2**((self.n).bit_length() - 1)
while tmp:
if res + tmp <= self.n and self.tree[res + tmp] < x:
x -= self.tree[res + tmp]
res += tmp
tmp >>= 1
if res >= self.n:
return self.n
return res + 1
import sys
input = sys.stdin.readline
INF = 10**18 + 1
Q, K = map(int, input().split())
query = []
value = [INF]
for _ in range(Q):
q = tuple(map(int, input().split()))
if q[0] == 1:
value.append(q[1])
query.append(q)
S = Set(set(value))
for q in query:
if q[0] == 1:
S.insert(q[1])
else:
v = S.get(K)
if v == INF:
print(-1)
else:
print(v)
S.delete(v)
toyuzuko