Pagini recente » Cod sursa (job #3142999) | Cod sursa (job #654221) | Cod sursa (job #1871998) | Cod sursa (job #447973) | Cod sursa (job #2481322)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("divk.in");
ofstream fout("divk.out");
vector <int> v[100005];
int a,b;
int bs(int r,int x)
{
int st=0,dr=v[r].size()-1,med,last=v[r].size();
while(st<=dr)
{
med=(st+dr)/2;
if(v[r][med]>=x)
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return v[r].size()-last;
}
int solve(int poz,int s)
{
return bs(s,poz-b+1)-bs(s,poz-a+2);
}
int main()
{
int n,k,r=0,x;
long long ans=0;
fin>>n>>k>>a>>b;
v[0].push_back(0);
for(int i=1;i<=n;i++)
{
fin>>x;
r=(r+x)%k;
ans+=solve(i,r);
v[r].push_back(i);
}
fout<<ans;
return 0;
}