結果

問題 No.2171 OR Assignment
ユーザー suisen
提出日時 2022-12-23 01:39:18
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 326 ms / 3,500 ms
コード長 503 bytes
コンパイル時間 218 ms
コンパイル使用メモリ 82,272 KB
実行使用メモリ 107,328 KB
最終ジャッジ日時 2024-11-18 06:46:51
合計ジャッジ時間 6,714 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

P = 998244353

N = int(input())
A = list(map(int, input().split()))

ppos = []
pd = [1]
for i, v in enumerate(A):
    pos = [i]
    for j in reversed(ppos):
        nv = v | A[j]
        if nv != v:
            v = nv
            pos.append(j)
    pos.reverse()

    siz = len(pos)
    dp = [0] * (siz + 1)
    j = 0
    for k in range(siz):
        while j < len(ppos) and ppos[j] <= pos[k]:
            j += 1
        dp[k + 1] = dp[k] + pd[j]
    pd = [v % P for v in dp]
    ppos = pos
print(pd[-1])
0