Pagini recente » Cod sursa (job #1033726) | Cod sursa (job #555170) | Cod sursa (job #2231366) | Cod sursa (job #2285838) | Cod sursa (job #972576)
Cod sursa(job #972576)
#include<fstream>
#include<vector>
using namespace std;
int n,K,A,B,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,x;
ifstream fin("divk.in");
fin>>n>>K>>A>>B;
for(i=1;i<=n;i++)
{
fin>>x;
x%=K;
sum[i]=sum[i-1]+x;
if(sum[i]>=K)
sum[i]-=K;
}
fin.close();
ofstream fout("divk.out");
fout<<(Count(B)-Count(A-1))<<"\n";
fout.close();
return 0;
}