#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL __int64
#define lowbit(x) (x&(-x))
const LL mod=1e9+7;
const LL maxn=500050;
LL a[maxn],b[maxn],c[maxn],f[maxn],ans[maxn];
LL n,m,x,y,z,t;
void add(LL x,LL val)
{
while(x<=n)
{
c[x]=(c[x]+val)%mod;
x+=lowbit(x);
}
}
LL sum(LL x)
{
LL s=0;
while(x)
{
s=(s+c[x])%mod;
x-=lowbit(x);
}
return s;
}
void init()
{
LL i,j,k;
for(i=0;i<n;i++)
{
b[i]=f[i]=a[i%m];
a[i%m]=(x*a[i%m]+y*(i+1))%z;
}
sort(b,b+n);
t=1;
a[1]=b[0];
for(i=1;i<n;i++)
{
if(b[i]!=b[i-1])a[++t]=b[i];
}
}
int main()
{
LL T,tt=0;
scanf("%I64d",&T);
while(T--)
{
LL i,j,k,p,q,s=0;
scanf("%I64d%I64d%I64d%I64d%I64d",&n,&m,&x,&y,&z);
memset(c,0,sizeof(c));
for(i=0;i<m;i++)
scanf("%I64d",&a[i]);
init();
for(i=0;i<n;i++)
{
p=lower_bound(a+1,a+t+1,f[i])-a;
ans[i]=sum(p-1)+1;
add(p,ans[i]);
}
for(i=0;i<n;i++)
s=(s+ans[i])%mod;
printf("Case #%I64d: %I64d\n",++tt,s);
}
return 0;
}
tjut 3030
最新推荐文章于 2016-11-04 22:02:44 发布