三个关注。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll p=1e7+19;
const int maxq=1e5+5;
int n,q,t;
ll ksm(ll a,ll b)
{
ll ret=1;
while(b)
{
if(b&1)ret=ret*a%p;
a=a*a%p;
b>>=1;
}
return ret;
}
ll inv(ll a)
{
return ksm(a,p-2);
}
unordered_map<ll,ll> nodelazyadd;
struct DT
{
int op,i;
ll val;
}dt[maxq];
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=q;i++)
{
scanf("%d",&dt[i].op);
if(dt[i].op==1)
{
scanf("%d%lld",&dt[i].i,&dt[i].val);
dt[i].val%=p;
}
if(dt[i].op==2||dt[i].op==3||dt[i].op==4)
{
scanf("%lld",&dt[i].val);
dt[i].val%=p;
}
if(dt[i].op==5)
{
scanf("%d",&dt[i].i);
}
}
scanf("%d",&t);
ll lazymul=1,lazyadd=0;
ll sum=0;
ll ans=0;
for(int i=1;i<=t;i++)
{
ll ai,bi;
scanf("%lld%lld",&ai,&bi);
for(int j=1;j<=q;j++)
{
int opidx=(ai+1ll*j*bi)%q+1;
if(dt[opidx].op==1)
{
sum-=(nodelazyadd[dt[opidx].i]*lazymul+lazyadd);
nodelazyadd[dt[opidx].i]=(dt[opidx].val-lazyadd)*inv(lazymul);
nodelazyadd[dt[opidx].i]%=p;
sum+=(nodelazyadd[dt[opidx].i]*lazymul+lazyadd);
sum%=p;
}
if(dt[opidx].op==2)
{
lazyadd+=dt[opidx].val;
lazyadd%=p;
sum+=1ll*n*dt[opidx].val;
sum%=p;
}
if(dt[opidx].op==3)
{
lazyadd*=dt[opidx].val;
lazyadd%=p;
lazymul*=dt[opidx].val;
lazymul%=p;
sum*=dt[opidx].val;
sum%=p;
}
if(dt[opidx].op==4)
{
nodelazyadd.clear();
lazymul=1;
lazyadd=dt[opidx].val;
lazyadd%=p;
sum=ll(n)*dt[opidx].val;
sum%=p;
}
if(dt[opidx].op==5)
{
ans+=(nodelazyadd[dt[opidx].i]*lazymul+lazyadd);
ans%=p;
}
if(dt[opidx].op==6)
{
ans+=sum;
ans%=p;
}
}
}
printf("%lld",(ans%p+p)%p);
return 0;
}