#include <bits/stdc++.h>
using namespace std;
const int nx=1e5+5, mod=1e9+7;
int n, q, t, l, r, s[nx], dp[nx][2][2], f; // dp[digit][not 3 / anything][tight?]
char c;
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n>>q;
q++;
for (int i=1; i<=n; i++) cin>>c, s[i]=c-'0';
while (q--)
{
if (!f) f=1, t=1, l=1, r=n;
else cin>>t>>l>>r;
if (t==1)
{
for (int i=l; i<=r; i++) for (int j=0; j<2; j++) dp[i][j][0]=dp[i][j][1]=0;
for (int j=0; j<2; j++) dp[r+1][j][0]=dp[r+1][j][1]=1;
for (int i=r; i>=l; i--)
{
for (int tight=0; tight<2; tight++)
{
int lb=0, ub=tight?s[i]:9;
for (int d=lb; d<=ub; d++)
{
if (d==1) dp[i][1][tight]=(dp[i][1][tight]+dp[i+1][0][tight&(d==ub)])%mod;
else dp[i][1][tight]=(dp[i][1][tight]+dp[i+1][1][tight&(d==ub)])%mod;
if (d!=3)
{
if (d==1) dp[i][0][tight]=(dp[i][0][tight]+dp[i+1][0][tight&(d==ub)])%mod;
else dp[i][0][tight]=(dp[i][0][tight]+dp[i+1][1][tight&(d==ub)])%mod;
}
}
}
//cout<<"not tight "<<i<<" : "<<dp[i][0][0]<<' '<<dp[i][1][0]<<'\n';
//cout<<"debug "<<i<<" : "<<dp[i][0][1]<<' '<<dp[i][1][1]<<'\n';
}
cout<<dp[l][1][1]<<'\n';
}
else s[l]=r;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |