Submission #22354907
Source Code Expand
A = tuple(map(int, open(0).read().split()))[1:]
N = len(A)
def check(x):
"""
(上側の) 中央値が x 以上なら True を返す。
x 以上のものは +1、x 未満のものは -1 と数えて、区間和が 0 以上なら対象
"""
N = len(A)
count = [0] * (N + N + 10)
count[0] = 1
now = 0
cumsum = 1
k = 0
for a in A:
if a >= x:
now += 1
cumsum += count[now]
else:
cumsum -= count[now]
now -= 1
k += cumsum
count[now] += 1
cumsum += 1
return k + k >= N * (N + 1) // 2
B = sorted(A)
# 中央値は B[i] 以上である
ok, ng = 0, N
while ok + 1 < ng:
i = (ng + ok) // 2
if check(B[i]):
ok = i
else:
ng = i
print(B[ok])
Submission Info
| Submission Time | |
|---|---|
| Task | D - Median of Medians |
| User | maspy |
| Language | Python (3.8.2) |
| Score | 700 |
| Code Size | 751 Byte |
| Status | AC |
| Exec Time | 391 ms |
| Memory | 20540 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 700 / 700 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 0_00.txt, 0_01.txt, 0_02.txt |
| All | 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 0_00.txt | AC | 21 ms | 9024 KiB |
| 0_01.txt | AC | 21 ms | 9080 KiB |
| 0_02.txt | AC | 18 ms | 9076 KiB |
| 1_00.txt | AC | 23 ms | 9176 KiB |
| 1_01.txt | AC | 20 ms | 9076 KiB |
| 1_02.txt | AC | 358 ms | 11824 KiB |
| 1_03.txt | AC | 367 ms | 19908 KiB |
| 1_04.txt | AC | 324 ms | 20480 KiB |
| 1_05.txt | AC | 346 ms | 20388 KiB |
| 1_06.txt | AC | 351 ms | 20540 KiB |
| 1_07.txt | AC | 361 ms | 20364 KiB |
| 1_08.txt | AC | 373 ms | 19828 KiB |
| 1_09.txt | AC | 365 ms | 19900 KiB |
| 1_10.txt | AC | 365 ms | 19676 KiB |
| 1_11.txt | AC | 357 ms | 19912 KiB |
| 1_12.txt | AC | 380 ms | 19708 KiB |
| 1_13.txt | AC | 386 ms | 19800 KiB |
| 1_14.txt | AC | 388 ms | 19880 KiB |
| 1_15.txt | AC | 391 ms | 19776 KiB |