中國好區間 51Nod - 1495
阿新 • • 發佈:2018-12-12
https://www.51nod.com/Challenge/Problem.html#!#problemId=1495
大於等有t的數即為1 其他的為0 問題轉換為求有多少區間權值大於等於k 因為都是大於等於0的數 有單調性 雙指標掃一遍即可
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e7+10; ll ary[maxn]; ll t,b,c,mod; int n,k; int main() { ll ans; int i,p,cnt; scanf("%d%d%lld%lld%lld%lld%lld",&n,&k,&t,&ary[0],&b,&c,&mod); for(i=1;i<=n;i++) ary[i]=(ary[i-1]*b+c)%mod; ans=0,p=0,cnt=0; for(i=1;i<=n;i++){ while(p<n&&cnt<k){ p++; if(ary[p]>=t) cnt++; } if(cnt>=k) ans+=(n-p+1); if(ary[i]>=t) cnt--; } printf("%lld\n",ans); return 0; }