結果
| 問題 |
No.2382 Amidakuji M
|
| コンテスト | |
| ユーザー |
ikoma
|
| 提出日時 | 2023-07-14 22:11:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 178 ms / 2,000 ms |
| コード長 | 908 bytes |
| コンパイル時間 | 202 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 106,496 KB |
| 最終ジャッジ日時 | 2024-09-16 07:15:01 |
| 合計ジャッジ時間 | 3,035 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
import sys
input = sys.stdin.readline
class BIT:
def __init__(self, n):
self.size = n
self.bit = [0] * (n + 1)
def sum(self, i): # [0,i]
i+=1
s = 0
while i > 0:
s += self.bit[i]
i -= i & -i
return s
def sumrange(self, i, j): # [i,j)
return self.sum(j-1) - self.sum(i-1)
def add(self, i, x):
if x==0:return
i+=1
while i <= self.size:
self.bit[i] += x
i += i & -i
def inversion_number(A):
bit = BIT(max(A)+1)
ans = 0
for i, a in enumerate(A):
bit.add(a, 1)
ans += i + 1 - bit.sum(a)
return ans
N,M=map(int,input().split())
P=list(map(int,input().split()))
n = inversion_number(P)
# n + 偶数回 == M*a となる最小のMa
if n%2==1 and M%2==0:
print(-1)
else:
m = (n+M-1)//M*M
if n%2 != m%2:
m+=M
print(m)
ikoma