Pagini recente » Cod sursa (job #2565671) | Cod sursa (job #1383152) | Cod sursa (job #3281687) | Cod sursa (job #1590851) | Cod sursa (job #1040184)
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 500005
#define KMAX 100005
int N, K, A, B, X[NMAX];
long long sum[NMAX];
vector<int> all[KMAX];
void precompute()
{
sum[0] = 0;
sum[1] = X[1];
for(int i = 1; i <= N; ++i)
sum[i] = sum[i-1] + X[i];
for(int i = 1; i <= N; ++i)
all[sum[i]%K].push_back(i);
}
long long solve(int n){
long long ret = 0;
for(int r = 0; r < K; ++r)
if(all[r].size() != 0){
int b = 0, e = 0, m = all[r].size();
while(b < m){
while(e < m && ((all[r][e] - all[r][b] + 1) <= n)) ++e;
--e;
ret += (e-r+1);
b++;
}
}
return ret;
}
long long solve_1()
{
return solve(B) - solve(A-1);
}
int main()
{
ifstream in("divk.in");
ofstream out("divk.out");
in >> N >> K >> A >> B;
for(int i = 1; i <= N; ++i)
in >> X[i];
precompute();
out << solve_1();
return 0;
}