Pagini recente » Cod sursa (job #849042) | Cod sursa (job #2938621) | Cod sursa (job #1035511) | Cod sursa (job #2492226) | Cod sursa (job #972573)
Cod sursa(job #972573)
#include<fstream>
#include<deque>
using namespace std;
int n,K,A,B,v[500100],sum[500100],size[100100];
deque <int> D[100100];
inline long long Count(int L)
{
int i,r;
long long rez=0LL;
D[0].push_back(0);
size[0]=1;
for(i=1;i<=n;i++)
{
r=sum[i];
while(size[r] && i-D[r].front()>L)
{
D[r].pop_front();
size[r]--;
}
rez+=1LL*size[r];
D[r].push_back(i);
size[r]++;
}
for(i=0;i<K;i++)
{
D[i].clear();
size[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;
}