Pagini recente » Cod sursa (job #1225635) | Cod sursa (job #903849) | Cod sursa (job #2774864) | Cod sursa (job #1075899) | Cod sursa (job #2155493)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, k, a, b, dp[500010];
vector <ll> v[100005];
ll get(int l){
ll ans = 0;
if (v[0].size() && v[0][0] <= l){
int i = 0;
while (i < v[0].size() && v[0][i] <= l) i++;
ans += i;
}
for (int i=0; i<k; i++){
if (v[i].size() > 1){
int st = 0, dr = 0;
while (dr < v[i].size()){
while (st < dr && v[i][dr] - v[i][st] > l) st++;
while (dr < v[i].size() && v[i][dr] - v[i][st] <= l) dr++;
if (dr == v[i].size() && (v[i][dr - 1] - v[i][st] > l || st == dr - 1)) st = dr;
ans += (dr - st)*(dr - st - 1)/2;
st++;
}
}
}
return ans;
}
int main(){
ifstream cin ("divk.in");
ofstream cout ("divk.out");
cin >> n >> k >> a >> b;
for (int i=1; i<=n; i++) cin >> dp[i], dp[i] += dp[i-1], v[dp[i]%k].push_back(i);
cout << get(b) - get(a - 1);
return 0;
}