結果
問題 |
No.3026 Range LCM (Online Version)
|
ユーザー |
👑 ![]() |
提出日時 | 2025-02-11 04:55:02 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,582 bytes |
コンパイル時間 | 502 ms |
コンパイル使用メモリ | 82,656 KB |
実行使用メモリ | 227,488 KB |
最終ジャッジ日時 | 2025-02-14 01:43:33 |
合計ジャッジ時間 | 24,407 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 1 |
other | RE * 32 |
ソースコード
MOD = 998244353 N = int(input()) A = [i for i in map(int, input().split())] Q = int(input()) L = [0] * Q R = [0] * Q for i in range(Q): L[i], R[i] = map(int, input().split()) L[i] -= 1 B = 200200 table = [0] * B for i in range(2, B): if table[i] == 0: j = i while j < B: table[j] = i j += i ans = [0] * Q G = [[] for i in range(B)] left = [[] for i in range(N)] right = [[] for i in range(N)] div = [[] for i in range(N)] ind = [0] * B for i in range(N): id = 0 val = A[i] p = -1 m = 1 while val != 1: if p != table[val]: p = table[val] m = 1 m *= p G[m].append(i) id += 1 val //= p div[i].append(m) size = 1 while size < N: size *= 2 seg = [1] * (size * 2) def mul_seg(id, val): id += size seg[id] *= val while id != 1: id //= 2 seg[id] = seg[id * 2] * seg[id * 2 + 1] % MOD def prod(l, r): l += size r += size res = 1 while l < r: if l & 1: res = res * seg[l] % MOD l += 1 if r & 1: r -= 1 res = res * seg[r] % MOD l //= 2 r //= 2 return res order = list(range(Q)) order.sort(key=lambda i : L[i]) l = 0 for i in range(B): if len(G[i]): mul_seg(G[i][0], table[i]) for id in order: while l < L[id]: for a in div[l]: ind[a] += 1 if len(G[a]) != ind[a]: mul_seg(G[a][ind[a]], table[a]) l += 1 ans[id] = prod(L[id], R[id]) for x in ans: print(x)