Pagini recente » Cod sursa (job #2855612) | Cod sursa (job #2399045) | Cod sursa (job #1991357) | Rating Abi Talent (imparatulVerde) | Cod sursa (job #1548196)
#include <cstdio>
#include <cstring>
#include <vector>
#define NMAX 500005
using namespace std;
vector <vector <int> > aux;
int v[NMAX] , p[NMAX];
int n , k , a , b;
int solve(int nr);
int main() {
freopen("divk.in" , "r" , stdin);
freopen("divk.out" , "w" , stdout);
int sum = 0;
scanf("%d %d %d %d" , &n , &k , &a , &b);
aux.resize(k + 5);
aux[0].push_back(0);
for(int i = 1 ; i <= n ; ++i) {
scanf("%d" , &v[i]);
sum += v[i];
if(sum > k) {
sum -= k;
}
aux[sum].push_back(i);
}
int sol = solve(b) - solve(a - 1);
printf("%d" , sol);
return 0;
}
int solve(int nr) {
int sum = 0 , sol = 0;
memset(p , 0 , sizeof(p));
for(int i = 1 ; i <= n ; ++i) {
sum += v[i];
if(sum > k) {
sum -= k;
}
while(p[sum] < aux[sum % k].size() && aux[sum][p[sum]] < i - nr) {
++p[sum];
}
sol += i - p[sum];
}
return sol;
}