Cod sursa(job #2155312)

Utilizator Constantin.Dragancea Constantin Constantin. Data 7 martie 2018 19:48:19
Problema Divk Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;

int n, k, a, b, dp[500010];
vector <int> v[100005];

int get(int l){
    int ans = 0;
    if (v[0].size() && v[0][0] <= l){
        int i = 0;
        while (v[0][i] <= l) i++;
        ans += i - 1;

    }
    for (int i=0; i<k; i++){
        if (v[i].size() > 1){
            int st = 0, dr = 1;
            while (st < v[i].size()){
                while (dr < v[i].size() && v[i][dr] - v[i][st] <= l) 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;
}