```cpp
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
#define int long long
const int M=1e5+5,JYY=1e7+19;
int n,q,t,cnt=0,len=0,Ans=0,lsh[M],inv[JYY];
int now_tim=0,last_tim=0,Sum=0,Add=0,Mul=1,tong[M],Tim[M];
struct Query{
int opt,x,val;
}Q[M];
int read(){
int x=0,y=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') y=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x*10+ch-'0')%JYY;
ch=getchar();
}
if(y==-1) return JYY-x;
return x;
}
void work(int a,int b){
for(int i=1;i<=q;i++){
now_tim++;
int now=(a+b*i)%q+1;
if(Q[now].opt==1){
if(Tim[Q[now].x]<=last_tim) tong[Q[now].x]=0;
int Val=(Q[now].val-Add+JYY)%JYY*inv[Mul]%JYY;
Sum=(Sum-tong[Q[now].x]+Val+JYY)%JYY;
tong[Q[now].x]=Val;
Tim[Q[now].x]=now_tim;
}
else if(Q[now].opt==2) Add=(Add+Q[now].val)%JYY;
else if(Q[now].opt==3){
Mul=(Mul*Q[now].val)%JYY;
Add=(Add*Q[now].val)%JYY;
}
else if(Q[now].opt==4){
Sum=0;Mul=1;
Add=Q[now].val%JYY;
last_tim=now_tim;
}
else if(Q[now].opt==5){
if(Tim[Q[now].x]<=last_tim) tong[Q[now].x]=0;
Ans=(Ans+tong[Q[now].x]*Mul%JYY+Add)%JYY;
Tim[Q[now].x]=now_tim;
}
else if(Q[now].opt==6) Ans=(Ans+Sum*Mul%JYY+Add*n%JYY)%JYY;
}
}
void solve(){
inv[0]=1;inv[1]=1;for(int i=2;i<JYY;i++) inv[i]=((JYY-JYY/i)*inv[JYY%i])%JYY;
n=read(),q=read();
for(int i=1;i<=q;i++){
Q[i].opt=read();
if(Q[i].opt==6) continue ;
if(Q[i].opt==2||Q[i].opt==3||Q[i].opt==4) Q[i].val=read();
else if(Q[i].opt==5) Q[i].x=lsh[++cnt]=read();
else if(Q[i].opt==1) Q[i].x=lsh[++cnt]=read(),Q[i].val=read();
}
sort(lsh+1,lsh+cnt+1);len=unique(lsh+1,lsh+cnt+1)-lsh-1;
// for(int i=1;i<=len;i++) printf("%lld ",lsh[i]);printf("\n");
for(int i=1;i<=q;i++)
if(Q[i].opt==1||Q[i].opt==5)
Q[i].x=lower_bound(lsh+1,lsh+len+1,Q[i].x)-lsh;
// for(int i=1;i<=q;i++){
// printf("%lld ",Q[i].opt);
// if(Q[i].opt==6) printf("\n");
// else if(Q[i].opt==2||Q[i].opt==3||Q[i].opt==4) printf("%lld\n",Q[i].val);
// else if(Q[i].opt==5) printf("%lld\n",Q[i].x);
// else if(Q[i].opt==1) printf("%lld %lld\n",Q[i].x,Q[i].val);
// }
t=read();
for(int i=1;i<=t;i++){
int a=read(),b=read();
work(a,b);
}
printf("%lld\n",Ans);
}
signed main(){
// freopen("question.in","r",stdin);
solve();
}
```
by bellmanford @ 2020-06-14 19:19:04
话说我的代码用暴力对拍了一个小时都没问题,好像是n较小就可以?
所以是不是没有访问到的地方的值的统计有问题?
by bellmanford @ 2020-06-14 19:25:26
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:21:26
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:25:14
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:25:17
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:25:21
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:25:45
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:25:49
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:25:52
@[Y25t](/user/88652)
by bellmanford @ 2020-06-16 14:41:17