結果
| 問題 |
No.2665 Minimize Inversions of Deque
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-12-28 22:02:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 370 ms / 2,000 ms |
| コード長 | 987 bytes |
| コンパイル時間 | 325 ms |
| コンパイル使用メモリ | 82,360 KB |
| 実行使用メモリ | 108,148 KB |
| 最終ジャッジ日時 | 2024-09-27 19:05:55 |
| 合計ジャッジ時間 | 11,195 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 40 |
ソースコード
from collections import deque
t = int(input())
for _ in range(t):
n = int(input())
p = list(map(lambda x: int(x) - 1, input().split()))
ft = [0] * n
def ft_add(p: int, v: int):
p += 1
while p <= n:
ft[p - 1] += v
p += -p & p
def ft_sum(r: int):
s = 0
while r:
s += ft[r - 1]
r -= -r & r
return s
inv = 0
a = deque()
for i, v in enumerate(p):
l = ft_sum(p[i])
r = i - l
ft_add(p[i], 1)
ok_l = l <= r
ok_r = l >= r
if ok_l and ok_r:
if a and a[0] < p[i]:
a.append(p[i])
else:
a.appendleft(p[i])
elif ok_l:
a.appendleft(p[i])
elif ok_r:
a.append(p[i])
else:
assert False
inv += min(l, r)
ans = list(a)
for i in range(n):
ans[i] += 1
print(inv)
print(*ans)