Cod sursa(job #2881517)

Utilizator MoarcascosminMoarcas Cosmin Moarcascosmin Data 30 martie 2022 15:44:17
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <vector>

using namespace std;

int n, l, u, element;
long long numar_secvente;
unordered_map<int, int>aparitii;
vector<int> v;

void Citire() {
    ifstream f("secv5.in");
    f >> n >> l >> u;
    for(int i = 0; i < n; i++) {
        f >> element;
        v.push_back(element);
    }
}

void DeterminareNumarSecvente() {
    int stanga = 0;
    int dreapta = -1;
    int numar_distincte = 0;

    while(dreapta < (int)v.size()) {
        if(numar_distincte < l) {
            dreapta++;
            element = v[dreapta];
            if(aparitii[element] == 0) {
                numar_distincte++;
                aparitii[element] = 1;
            }
            else {
                aparitii[element]++;
            }
            continue;
        }

        if(numar_distincte > u) {
            aparitii[v[stanga]]--;
            if(aparitii[v[stanga]] == 0)
                numar_distincte--;
            stanga++;
            continue;
        }
        numar_secvente += v.size() - dreapta;

        aparitii[v[stanga]]--;
        if(aparitii[v[stanga]] == 0)
            numar_distincte--;
        stanga++;
    }
}

void Afisare() {
    ofstream g("secv5.out");
    g << numar_secvente;
}

int main() {
    Citire();
    DeterminareNumarSecvente();
    Afisare();
    return 0;
}