結果
問題 |
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)