不知道为啥WA的只有68,思路和绝大多数题解是一样的,
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#include <unordered_map>
using namespace std;
#define int long long
const int M=1e7+19;
int t,q,n;
int ttag,ptag;
int a[130],b[130];
struct oper{int loc,val,tp;}op[100300];
unordered_map<int,int>m;
int now;
int sum=0;
int ans;
inline int p(int x){
if(m.count(x)) return m[x];
else return now;
}
inline int qp(int a,int x){
int res=1;
while(x){
if(x&1)res=res*a%M;
a=a*a%M;
x>>=1;
}
return res;
}
inline int inv(int x){return qp(x,M-2);}
signed main(){
ios::sync_with_stdio(0);
cin>>n>>q;
for(int i=1;i<=q;i++){
cin>>op[i].tp;
if(op[i].tp==1)cin>>op[i].loc>>op[i].val,op[i].val%=M;
else if(op[i].tp==2)cin>>op[i].val,op[i].val%=M;
else if(op[i].tp==3){cin>>op[i].val;
op[i].val%=M;
if(!op[i].val)
op[i].tp=4;
}
else if(op[i].tp==4)cin>>op[i].val,op[i].val%=M;
else if(op[i].tp==5)cin>>op[i].loc;
}
cin>>t;
for(int i=1;i<=t;i++)
cin>>a[i]>>b[i];
for(int i=1;i<=t;i++){
for(int j=1;j<=q;j++){
int id=(a[i]+j*b[i]%q)%q+1;
int tp=op[id].tp,loc=op[id].loc,val=op[id].val;
if(tp==1){
int tmp=((val-ptag)%M+M)%M*inv(ttag)%M;
sum+=tmp-p(loc);
m[loc]=tmp;
sum%=M;
}
else if(tp==2)ptag=(ptag+val)%M;
else if(tp==3)ttag=ttag*val%M,ptag=ptag*val%M;
else if(tp==4){
sum=n*val%M;
m.clear();
ttag=1;
ptag=0;
now=val;
}
else if(tp==5)ans=(ans+p(loc)*ttag%M+ptag)%M;
else ans=(ans+sum*ttag%M+n*ptag%M)%M;
}
}
cout<<(ans%M+M)%M;
return 0;
}