Pagini recente » Cod sursa (job #2703469) | Cod sursa (job #1322587) | Cod sursa (job #2456089) | Cod sursa (job #1260040) | Cod sursa (job #2481314)
#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;
for(int i=0;i<n;i++)
{
fin>>x;
r=(r+x)%k;
ans+=solve(i,r);
v[r].push_back(i);
}
fout<<ans;
return 0;
}