Cod sursa(job #2700009)

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

using namespace std;

const int N = 1 << 20;

unsigned v[N];
int dl[N], du[N];
unordered_map<unsigned, int> m1, m2;

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) {
        ++m1[v[i]];
        if (m1[v[i]] == 1)
            ++dif;
        while (j <= i && dif >= l) {
            if (!(--m1[v[j]]))
                --dif;
            ++j;
        }
        if (dif == l - 1)
            dl[i] = j;
        else
            dl[i] = -1;
    }
    
    j = dif = 0;
    for (int i = 0; i < n; ++i) {
        ++m2[v[i]];
        if (m2[v[i]] == 1)
            ++dif;
        while (j <= i && dif > u) {
            if (!(--m2[v[j]]))
                --dif;
            ++j;
        }
        du[i] = j;
    }
    
    long long rez = 0;
    for (int i = 0; i < n; ++i)
        if (dl[i] > du[i])
            rez += dl[i] - du[i];
    
    out << rez;
    out.close();
    return 0;
}