Cod sursa(job #2699993)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 26 ianuarie 2021 12:37:56
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <unordered_map>

using namespace std;

const int N = 1 << 20;

int v[N], dl[N], du[N];
unordered_map<int, int> m;

int main() {
    ifstream in("secv5.in");
    ofstream out("secv5.out");
    
    int n, l, u;
    in >> n >> l >> u;
    for (int i = 0; i < n; ++i)
        in >> v[i];
    in.close();
    
    int j = 0, dif = 0;
    for (int i = 0; i < n; ++i) {
        ++m[v[i]];
        if (m[v[i]] == 1)
            ++dif;
        while (dif >= l) {
            if (!(--m[v[j]]))
                --dif;
            ++j;
        }
        if (dif == l - 1)
            dl[i] = j;
        else
            dl[i] = -1;
    }
    
    j = dif = 0;
    m.clear();
    for (int i = 0; i < n; ++i) {
        ++m[v[i]];
        if (m[v[i]] == 1)
            ++dif;
        while (dif > u) {
            if (!(--m[v[j]]))
                --dif;
            ++j;
        }
        du[i] = j;
    }
    
    long long rez = 0;
    for (int i = 0; i < n; ++i)
        if (dl[i] != -1 && du[i] != -1)
            rez += dl[i] - du[i];
    
    out << rez;
    out.close();
    return 0;
}