题解:

按照每一个要求,分类讨论,讨论压下去了多少

代码:

#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7,N=20000005;
int n,A,B,C,ans,x,a,b,M,u[N],v[N],p,k;
int main()
{
    scanf("%d%d%d%d%d%d%d%d",&n,&A,&B,&C,&x,&a,&b,&M);
    int l=N/2,r=N/2-1;
    for (int i=1;i<=n;i++)
     {
         x=((long long)a*x+b)%M;
         int X,Y=x; 
         if (k<=1||x%(A+B+C)<A)X=0;
         else if (x%(A+B+C)<A+B)X=1;
         else X=2;
         if (X==2)
          {
              k--;p--;
              while (v[r]+p==0)r--;
              (ans+=u[r])%=MOD;
          }
         if (X==0)
         {
             k++;p++;
              if (u[r]<Y)u[++r]=Y,v[r]=-p+1;
              (ans+=u[r])%=MOD;              
         } 
        if (X==1)
         {
             k++;
             while (l<=r&&u[l]<Y)l++;
             u[--l]=Y;v[l]=k-p;
              (ans+=u[r])%=MOD;               
         } 
     }
    printf("%d",ans); 
}

 

posted on 2017-09-11 20:03  宣毅鸣  阅读(125)  评论(0编辑  收藏  举报