結果
| 問題 | No.2616 中央番目の中央値 |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-05-24 05:18:43 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 607 ms / 2,000 ms |
| コード長 | 1,729 bytes |
| 記録 | |
| コンパイル時間 | 226 ms |
| コンパイル使用メモリ | 84,964 KB |
| 実行使用メモリ | 181,820 KB |
| 最終ジャッジ日時 | 2026-05-24 05:19:03 |
| 合計ジャッジ時間 | 15,660 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge2_1 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 37 |
ソースコード
class BIT:
def __init__(self, A):
self.size = len(A)
self.bit = [0]*(len(A)+1)
for i in range(len(A)):
self.add(i, A[i])
def sum(self, i):
i += 1
ans = 0
while i > 0:
ans += self.bit[i]
i -= -i&i
return ans
def query(self, l, r):
if l == 0:
return self.sum(r-1)
else:
return self.sum(r-1)-self.sum(l-1)
def add(self, i, x):
i += 1
while i <= self.size:
self.bit[i] += x
i += -i&i
class CP:
def __init__(self, N):
self.fact = [1]*(N+1)
self.fact_inv = [1]*(N+1)
for i in range(2, N+1):
self.fact[i] = self.fact[i-1]*i%MOD
self.fact_inv[N] = pow(self.fact[N], -1, MOD)
for i in reversed(range(1, N)):
self.fact_inv[i] = self.fact_inv[i+1]*(i+1)%MOD
def C(self, N, K):
if N < 0 or K < 0 or N < K:
return 0
return self.fact[N]*self.fact_inv[K]%MOD*self.fact_inv[N-K]%MOD
def P(self, N, K):
if N < 0 or K < 0 or N < K:
return 0
return self.fact[N]*self.fact_inv[N-K]%MOD
def H(self, N, K):
if N < 0 or K < 0:
return 0
if N == K == 0: return 1
return self.C(N+K-1, K)
MOD = 998244353
cp = CP(10**6)
N = int(input())
P = list(map(int, input().split()))
P = sorted(enumerate(P), key=lambda x:x[1])
B = BIT([0]*N)
ans = 0
for i, _ in P:
a = B.query(0, i) if 1 <= i else 0
b = i-a
c = B.query(i+1, N) if i+1 < N else 0
d = (N-1-i)-c
c, d = d, c
ans += cp.C(a+c, min(a, c))*cp.C(b+d, min(b, d))%MOD
ans %= MOD
B.add(i, 1)
print(ans)
detteiuu