結果
| 問題 |
No.1067 #いろいろな色 / Red and Blue and more various colors (Middle)
|
| コンテスト | |
| ユーザー |
qwewe
|
| 提出日時 | 2025-05-14 12:56:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,468 bytes |
| コンパイル時間 | 442 ms |
| コンパイル使用メモリ | 82,404 KB |
| 実行使用メモリ | 361,344 KB |
| 最終ジャッジ日時 | 2025-05-14 12:57:54 |
| 合計ジャッジ時間 | 8,529 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 24 WA * 1 |
ソースコード
import bisect
MOD = 998244353
def main():
import sys
input = sys.stdin.read
data = input().split()
idx = 0
N = int(data[idx])
Q = int(data[idx+1])
idx +=2
A = list(map(int, data[idx:idx+N]))
idx +=N
queries = []
for _ in range(Q):
l = int(data[idx])
r = int(data[idx+1])
p = int(data[idx+2])
queries.append((l, r, p))
idx +=3
# Sort the array
sorted_A = sorted(A)
# Precompute prefix_prod and suffix_prod_minus_1
prefix_prod = [1] * (N + 1)
for i in range(N):
prefix_prod[i+1] = prefix_prod[i] * sorted_A[i] % MOD
suffix_prod_minus_1 = [1] * (N + 1)
for i in range(N-1, -1, -1):
temp = sorted_A[i] - 1
if temp < 0:
temp = 0
suffix_prod_minus_1[i] = suffix_prod_minus_1[i+1] * temp % MOD
# Precompute x_i for each element in sorted_A
x = []
for a in sorted_A:
temp = a - 1
if temp <= 0:
xi = 0
else:
temp_mod = temp % MOD
if temp_mod == 0:
xi = 0
else:
xi = pow(temp_mod, MOD-2, MOD)
x.append(xi)
# Precompute DP for elementary symmetric sums
max_p = N
dp = [[0] * (max_p + 1) for _ in range(N + 2)] # dp[i][p] for i in 0..N, p in 0..max_p
dp[N][0] = 1
for i in range(N-1, -1, -1):
dp[i][0] = 1
xi = x[i]
for p in range(1, max_p + 1):
dp[i][p] = (dp[i+1][p] + xi * dp[i+1][p-1]) % MOD
# Process each query
results = []
for l, r, p in queries:
res = 0
for c in range(l, r+1):
# Find the first index i where sorted_A[i] >= c
i = bisect.bisect_left(sorted_A, c)
m = N - i
if m < p:
cont = 0
else:
# Compute product_not_S
product_not_S = prefix_prod[i]
# Compute product_S
product_S = suffix_prod_minus_1[i]
# Get e_p
if p > max_p:
e_p_val = 0
else:
e_p_val = dp[i][p]
# Compute contribution
cont = product_not_S * product_S % MOD
cont = cont * e_p_val % MOD
res ^= cont
results.append(res % MOD)
print('\n'.join(map(str, results)))
if __name__ == '__main__':
main()
qwewe