tjut 3030

    xiaoxiao2024-02-24  41

    #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; }
    转载请注明原文地址: https://ju.6miu.com/read-1286749.html
    最新回复(0)