結果

問題 No.3553 Good Quartet
コンテスト
ユーザー 👑 loop0919
提出日時 2026-05-04 10:52:20
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 1,122 ms / 2,000 ms
コード長 1,980 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 378 ms
コンパイル使用メモリ 85,376 KB
実行使用メモリ 216,124 KB
最終ジャッジ日時 2026-05-22 21:48:04
合計ジャッジ時間 13,449 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_0
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 15
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from collections import defaultdict

MOD = 998244353

N, Q = [int(s) for s in input().split()]
S = [int(s) for s in input().split()]

values = [1, 5, 7, 11, 19, 29]
dic = [defaultdict(int) for _ in range(max(values) + 1)]

for s in S:
    for v in values:
        if s % v == 0:
            dic[v][s // v] += 1

ans = 0

for s in S:
    ans += dic[1][s] * dic[5][s] * dic[7][s] * dic[11][s]
    ans += dic[1][s] * dic[11][s] * dic[19][s] * dic[29][s]
    ans %= MOD

for _ in range(Q):
    t, x = [int(s) for s in input().split()]

    if t == 1:
        prev = 0
        for v in values:
            if x % v != 0:
                continue
            div = x // v
            prev += dic[1][div] * dic[5][div] * dic[7][div] * dic[11][div]
            prev += dic[1][div] * dic[11][div] * dic[19][div] * dic[29][div]

        for v in values:
            if x % v != 0:
                continue
            div = x // v
            dic[v][div] += 1

        curr = 0
        for v in values:
            if x % v != 0:
                continue
            div = x // v
            curr += dic[1][div] * dic[5][div] * dic[7][div] * dic[11][div]
            curr += dic[1][div] * dic[11][div] * dic[19][div] * dic[29][div]

        ans += curr - prev

    else:
        prev = 0
        for v in values:
            if x % v != 0:
                continue
            div = x // v
            prev += dic[1][div] * dic[5][div] * dic[7][div] * dic[11][div]
            prev += dic[1][div] * dic[11][div] * dic[19][div] * dic[29][div]

        for v in values:
            if x % v != 0:
                continue
            div = x // v
            dic[v][div] -= 1

        curr = 0
        for v in values:
            if x % v != 0:
                continue
            div = x // v
            curr += dic[1][div] * dic[5][div] * dic[7][div] * dic[11][div]
            curr += dic[1][div] * dic[11][div] * dic[19][div] * dic[29][div]

        ans += curr - prev

    print(ans)
0