結果
| 問題 | No.3716 Keep it Integer |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-18 21:50:45 |
| 言語 | C++23 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 128 ms / 2,000 ms |
| + 932µs | |
| コード長 | 1,247 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
#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";
}