Cod sursa(job #2832247)

Utilizator puica2018Puica Andrei puica2018 Data 13 ianuarie 2022 11:05:54
Problema Divk Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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


int n,k,a,b;
int v[500005];
vector <int> p[100005],aux;

long long f(int x)
{
    long long sum=0;
    for(int i=0; i<k; i++)
    {
        if(p[i].size()<=1)
            continue;
        aux.clear();
        aux.push_back(0);
        for(int j=0; j<p[i].size()-1; j++)
            aux.push_back(p[i][j+1]-p[i][j]);
        int j0=0,s=0;
        for(int j1=1; j1<aux.size(); j1++)
        {
            while(j0<aux.size()-1 && s+aux[j0+1]<=x)
            {
                j0++;
                s+=aux[j0];
            }
            if(j0>=j1)
                sum+=j0-j1+1;
            sum-=aux[j1];
        }
    }
    return sum;
}

int main()
{
    fin>>n>>k>>a>>b;
    for(int i=1; i<=n; i++)
        fin>>v[i];
    p[0].push_back(0);
    for(int i=1; i<=n; i++)
        p[v[i]%k].push_back(i);
    fout<<f(b)-f(a-1)<<"\n";
    return 0;
}