Pagini recente » Cod sursa (job #686237) | Cod sursa (job #3258818) | Cod sursa (job #1424072) | Cod sursa (job #1651553) | Cod sursa (job #972575)
Cod sursa(job #972575)
#include<fstream>
#include<vector>
using namespace std;
int n,K,A,B,v[500100],sum[500100],size[100100],ind[100100];
vector <int> poz[100100];
inline long long Count(int L)
{
int i,r;
long long rez=0LL;
poz[0].push_back(0);
ind[0]=0;
size[0]=1;
for(i=1;i<=n;i++)
{
r=sum[i];
while(ind[r]<size[r] && i-poz[r][ind[r]]>L)
ind[r]++;
rez+=1LL*(size[r]-ind[r]);
poz[r].push_back(i);
size[r]++;
}
for(i=0;i<K;i++)
{
poz[i].clear();
size[i]=0;
ind[i]=0;
}
return rez;
}
int main()
{
int i;
ifstream fin("divk.in");
fin>>n>>K>>A>>B;
for(i=1;i<=n;i++)
{
fin>>v[i];
sum[i]=(sum[i-1]+v[i])%K;
}
fin.close();
ofstream fout("divk.out");
fout<<(Count(B)-Count(A-1))<<"\n";
fout.close();
return 0;
}