結果
問題 | No.2762 Counting and Deleting |
ユーザー |
![]() |
提出日時 | 2024-05-17 21:47:46 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 548 ms / 4,000 ms |
コード長 | 1,424 bytes |
コンパイル時間 | 4,429 ms |
コンパイル使用メモリ | 258,872 KB |
最終ジャッジ日時 | 2025-02-21 14:41:33 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 15 |
ソースコード
#include <stdio.h>#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;using mint = modint998244353;using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf32 1000000001#define Inf64 1000000000000000001using A = array<array<mint,4>,4>;A e(){A ret;rep(i,4){rep(j,4){if(i==j)ret[i][j] = 1;else ret[i][j] = 0;}}return ret;}A e2(){A ret;rep(i,4){rep(j,4)ret[i][j] = 0;}return ret;}A op(A a,A b){A ret = e2();rep(i,4){rep(j,4){rep(k,4)ret[i][k] += a[i][j] * b[j][k];}}return ret;}A mapping(int a,A b){if(a==0)return b;rep(i,4){rep(j,4){if(i==j)b[i][j] = 1;else b[i][j] = 0;}}return b;}/*A mapping(int a,int b){if(b==0)return a;rep(i,4){rep(j,4){if(i==j)a[i][j] = 1;else a[i][j] = 0;}}return a;}*/int composition(int a,int b){return (a|b);}int id(){return 0;}int main(){int N,Q;cin>>N>>Q;string s;cin>>s;lazy_segtree<A,op,e,int,mapping,composition,id> seg(N);rep(j,N){auto A = e2();rep(i,4){if((i>>(s[j]-'0'))&1)continue;A[i][0] ++;}rep(i,4){A[i][i|(1<<(s[j]-'0'))] ++;}seg.set(j,A);}rep(i,Q){int t,l,r;cin>>t>>l>>r;l--;if(t==1){seg.apply(l,r,1);}else{auto ret = seg.prod(l,r);mint ans = 0;rep(j,4)ans += ret[1][j];ans--;cout<<ans.val()<<endl;}}return 0;}