結果

問題 No.3716 Keep it Integer
コンテスト
ユーザー karinohito
提出日時 2026-09-18 21:50:45
言語 C++23
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 128 ms / 2,000 ms
+ 932µs
コード長 1,247 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,426 ms
コンパイル使用メモリ 346,380 KB
実行使用メモリ 14,080 KB
最終ジャッジ日時 2026-09-18 21:52:15
合計ジャッジ時間 11,767 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 50
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
using namespace std;
using ll=long long;

#include<atcoder/modint>
#include<atcoder/lazysegtree>
using namespace atcoder;
using mint=modint998244353;

using namespace std;
using namespace atcoder;

using mint = modint998244353;

struct S {
    mint a;
    int size;
};
S op(S l, S r) { return S{l.a + r.a, l.size + r.size}; }
S e() { return S{0, 0}; }
S mapping(mint l, S r) { return S{r.a + r.size * l, r.size}; }
mint composition(mint l, mint r) { return l+r;}
mint id() { return 0; }

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N,X;
    cin>>N>>X;
    vector<ll> A(N+1,X);
    for(int i=0;i<N;i++)cin>>A[i+1];
    vector<ll> next_n(N+1);
    ll p=N+1;
    for(int i=N;i>=0;i--){
        next_n[i]=p;
        if(A[i]>1)p=i;
    }
    vector<mint> DP(N+1,0);
    vector<S> V(N+2,S({0,1}));
    lazy_segtree<S,op,e,mint,mapping,composition,id> seg(V);
    DP[0]=1;
    seg.set(0,{1,1});
    for(ll i=0;i<=N;i++){
        ll L=A[i];
        mint g=seg.get(i).a;
        ll x=i;
        while(x<=N){
            x=next_n[x];
            if(x==N+1)break;
            if(L%A[x]!=0)break;
            L/=A[x];
        }
        seg.apply(i+1,x+1,g);
    }
    cout<<seg.get(N+1).a.val()<<"\n";
}
0