Cod sursa(job #2877034)

Utilizator dimi999Dimitriu Andrei dimi999 Data 24 martie 2022 08:49:08
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <map>
using namespace std;

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

vector <int> v;
map <int, int> fvst, fvdr;

int main() {
    int N, L, U;

    fin >> N >> L >> U;

    for(int i = 1; i <= N; i++) {
        int x; fin >> x; v.push_back(x);
    }
    int poz = 0, st = 0, dr = 0;

    while(fvst.size() < L && poz < N) {
        fvst[v[poz]]++;
        fvdr[v[poz]]++;
        poz++;
    }
    if(poz == N) {
        if(fvst.size() < L) {
            fout << 0 << '\n';
            return 0;
        }
    }

    st = poz - 1;

    while(fvdr.size() <= U && poz < N) {
        fvdr[v[poz]]++;
        poz++;
    }

    dr = poz - 1;

    long long ans = dr - st + 1;

    poz = 1;
    while(poz < N) {
        fvst[v[poz - 1]]--;
        fvdr[v[poz - 1]]--;

        if(fvst[v[poz - 1]] == 0) {
            fvst.erase(v[poz - 1]);
        }

        if(fvdr[v[poz - 1]] == 0) {
            fvdr.erase(v[poz - 1]);
        }

        while(fvst.size() < L && st < N - 1) {
            fvst[v[st + 1]]++;
            st++;
        }

        if(st == N - 1 && fvst.size() < L)
            break;

        while(fvdr.size() <= U && dr < N - 1) {
            fvdr[v[++dr]]++;
        }

        ans += dr - st + 1;
        poz++;
    }

    fout << ans;
    return 0;
}