傻逼题,按题意模拟即可,具体不说了,YY一下即可,不需要什么数据结构
#include<iostream> #include<cstring> #include<ctime> #include<cmath> #include<algorithm> #include<iomanip> #include<cstdlib> #include<cstdio> #include<map> #include<bitset> #include<set> #include<stack> #include<vector> #include<queue> using namespace std; #define MAXN 1000010 #define MAXM 1010 #define ull unsigned long long #define eps 1e-8 #define MOD 1000000007 #define INF 1000000000 int q[MAXN],siz; int hd,tl; ull sum,ans; int n,Q; bool iq[MAXN]; int pos[MAXN]; bool vis[MAXN]; int a[MAXN]; int A,B,p,x; int main(){ int i; int tmp; scanf("%d",&tmp); while(tmp--){ hd=1,tl=0; siz=0; sum=ans=0; memset(pos,0,sizeof(pos)); scanf("%d%d%d%d%d%d",&n,&Q,&x,&A,&B,&p); for(i=1;i<=Q;i++){ if(pos[x]){ vis[pos[x]]=0; }else{ if(siz==n){ while(!vis[hd]){ hd++; } pos[a[hd]]=0; sum-=a[hd]; hd++; }else{ siz++; } sum+=x; } pos[x]=++tl; a[tl]=x; vis[tl]=1; x=((ull)x*A+B)%p; ans+=sum*i; } printf("%llu\n",ans); } return 0; } /* */