Pagini recente » Cod sursa (job #15464) | Cod sursa (job #2085668) | Cod sursa (job #2085447) | Rating Ehsan Poursaeed (hsnprsd) | Cod sursa (job #2155139)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
using namespace std;
#define dim 100000
char buff[dim];
int p = 0;
void read(int &nr){
nr = 0;
while(buff[p] < '0' || buff[p] > '9')
if(++p == dim)
fread(buff, 1, dim, stdin), p = 0;
while(buff[p] >= '0' && buff[p] <= '9'){
nr = 10 * nr + buff[p] - '0';
if(++p == dim)
fread(buff, 1, dim, stdin), p = 0;
}
}
int dp[500100], n, x, mod, st, dr, mx, mn;
vector <int> v[100100];
long long rs;
int main(){
freopen("divk.in", "r", stdin);
freopen("divk.out", "w", stdout);
cin >> n >> mod >> mn >> mx;
for(int i = 1; i <= n; i++){
read(x);
dp[i] = (dp[i - 1] + x) % mod;
}
v[0].push_back(0);
for(int i = 1; i <= n; i++){
st = max(0, i - mx);
dr = max(0, i - mn);
auto it = upper_bound(v[dp[i]].begin(), v[dp[i]].end(), st - 1) - v[dp[i]].begin();
auto it2 = upper_bound(v[dp[i]].begin(), v[dp[i]].end(), dr) - v[dp[i]].begin();
rs += it2 - it;
v[dp[i]].push_back(i);
}
cout << rs;
return 0;
}