Cod sursa(job #2259300)

Utilizator qwerty1234qwerty qwerty1234 Data 13 octombrie 2018 11:24:35
Problema Secventa 5 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb

#include <bits/stdc++.h>

using namespace std;


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


const int Nmax = 2e6;

unordered_map < unsigned int, int > M;

unsigned int a[Nmax];


int n, L, U;


int main()
{
    int i, j, nrd;
    long long s, s1;
    fin >> n >> L >> U;
    for(i = 1 ; i <= n ; i++)
        fin >> a[i];
    j = 1;
    nrd = 0;
    s = s1 = 0;
    for(i = 1 ; i <= n ; i++)
    {
        ++M[a[i]];
        if(M[a[i]] == 1)
            ++nrd;
        while(nrd > U && j <= i)
        {
            --M[a[j]];
            if(M[a[j]] == 0)
            {
                --nrd;
                M.erase(a[j]);
            }
            ++j;

        }
        s += (i - j + 1);
    }
    M . clear();
    U = L - 1;
    j = 1;
    nrd = 0;
    for(i = 1 ; i <= n ; i++)
    {
        ++M[a[i]];
        if(M[a[i]] == 1)
            ++nrd;
        while(nrd > U)
        {
            --M[a[j]];
            if(M[a[j]] == 0)
            {
                --nrd;
                M.erase(a[j]);
            }
            ++j;

        }
        s1 += (i - j + 1);
    }
    fout << (s - s1) << "\n";
    fin.close();
    fout.close();
    return 0;
}