Cod sursa(job #2718052)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 8 martie 2021 13:42:53
Problema Divk Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

#define NMAX 500005
#define KMAX 100005
using namespace std;

ifstream fin("divk.in");
ofstream fout("divk.out");

vector<int> prec[KMAX];
int sum[NMAX];

int main()
{
    int n, k, a, b;
    fin >> n >> k >> a >> b;

    prec[0].push_back(0);
    for(int i = 1; i <= n; ++i){
        int val;
        fin >> val;

        sum[i] = sum[i - 1] + val;
        sum[i] %= k;
        prec[sum[i]].push_back(i);
    }

    long long rez = 0;
    for(int i = a; i <= n; ++i){
        int csSt = max(i - b, 0);
        int csDr = i - a;
        int pzA = (lower_bound(prec[sum[i]].begin(), prec[sum[i]].end(), csSt) - prec[sum[i]].begin());
        int pzB = (upper_bound(prec[sum[i]].begin(), prec[sum[i]].end(), csDr) - prec[sum[i]].begin()) - 1;
        rez += (pzB - pzA + 1);
    }
    fout << rez << '\n';
    return 0;
}