Pagini recente » Cod sursa (job #119571) | Cod sursa (job #1400615) | Cod sursa (job #1218635) | Cod sursa (job #1889363) | Cod sursa (job #2832251)
#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;
s-=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);
long long sum=0;
for(int i=1; i<=n; i++)
{
sum+=v[i];
p[sum%k].push_back(i);
}
fout<<f(b)-f(a-1)<<"\n";
return 0;
}