问你有多少个第k大值大于等于t的区间 n<1e7
枚举最后一个数字,递推.
即保持当前大于等于t的有k个即可
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
#ifdef noob
#define debug(x) std::cerr << #x << " = " << (x) << std::endl
#else
#define debug(...)
#endif
typedef long long LL;
const int MAXN = 1e7 + 17;
const int MOD = 1e9 + 7;
int a[MAXN];
int main()
{
#ifdef noob
freopen("Input.txt","r", stdin);
freopen("Output.txt", "w", stdout);
#endif
LL n,k,t,b,c,p;
cin>>n>>k>>t>>a[0]>>b>>c>>p;
for (int i = 1; i <= n; ++i)
{
a[i] = (1LL*a[i-1]*b+1LL*c)%(1LL*p);
// cout<<a[i]<<" ";
debug(i);
debug(a[i]);
}
int ed = -1,sum = 0;
for (int i = 1; i <= n; ++i)
{
if(a[i]>=t)
{
sum++;
// debug(i);
// debug(sum);
if(sum==k)
{
ed = i;
}
}
}
if(ed==-1)
return cout<<0<<endl,0;
LL ans = 0,dap = 1;
debug(ed);
debug(ans);
debug(dap);
for (int i = ed; i <= n; ++i)
{
if(a[i]>=t)
{
while(1)
{
dap++;
debug(dap-1);
if(a[dap-1]>=t)
{
break;
}
}
}
debug(i);
debug(dap);
ans += dap-1;
}
cout<<ans<<endl;
return 0;
}