結果
| 問題 |
No.649 ここでちょっとQK!
|
| コンテスト | |
| ユーザー |
brthyyjp
|
| 提出日時 | 2020-03-20 17:22:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 525 ms / 3,000 ms |
| コード長 | 1,122 bytes |
| コンパイル時間 | 352 ms |
| コンパイル使用メモリ | 82,528 KB |
| 実行使用メモリ | 134,596 KB |
| 最終ジャッジ日時 | 2024-12-14 10:51:48 |
| 合計ジャッジ時間 | 11,559 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
import sys
input = sys.stdin.readline
q, k = map(int, input().split())
Q = []
V = []
for i in range(q):
query = list(map(int, input().split()))
if len(query) == 1:
c = query[0]
v = 0
else:
c, v = query
V.append(v)
Q.append((c, v))
V = list(set(V))
V.sort()
toid = {}
import bisect
for v in V:
toid[v] = bisect.bisect_left(V, v)+1
n = len(V)
bit = [0]*(n+1)
def bit_query(i):
res = 0
while i > 0:
res += bit[i]
i -= i & (-i)
return res
def bit_update(i, x):
while i <= n:
bit[i] += x
i += i & (-i)
def ok(i):
if i <= 0:
return False
else:
return bit_query(i) >= k
for i in range(q):
c, v = Q[i]
if c == 1:
id = toid[v]
bit_update(id, 1)
else:
if bit_query(n) < k:
print(-1)
else:
l = 0
r = n
while l+1 < r:
mid = (l+r)//2
if ok(mid):
r = mid
else:
l = mid
print(V[r-1])
bit_update(r, -1)
brthyyjp