Pagini recente » Cod sursa (job #1006942) | Cod sursa (job #2637572) | Cod sursa (job #1971520) | Cod sursa (job #210301) | Cod sursa (job #2832247)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
int n,k,a,b;
int v[500005];
vector <int> p[100005],aux;
long long f(int x)
{
long long sum=0;
for(int i=0; i<k; i++)
{
if(p[i].size()<=1)
continue;
aux.clear();
aux.push_back(0);
for(int j=0; j<p[i].size()-1; j++)
aux.push_back(p[i][j+1]-p[i][j]);
int j0=0,s=0;
for(int j1=1; j1<aux.size(); j1++)
{
while(j0<aux.size()-1 && s+aux[j0+1]<=x)
{
j0++;
s+=aux[j0];
}
if(j0>=j1)
sum+=j0-j1+1;
sum-=aux[j1];
}
}
return sum;
}
int main()
{
fin>>n>>k>>a>>b;
for(int i=1; i<=n; i++)
fin>>v[i];
p[0].push_back(0);
for(int i=1; i<=n; i++)
p[v[i]%k].push_back(i);
fout<<f(b)-f(a-1)<<"\n";
return 0;
}