Cod sursa(job #2469278)

Utilizator stefan1anubystefan popa stefan1anuby Data 6 octombrie 2019 18:29:33
Problema Secventa 5 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <unordered_map>

using namespace std;
ifstream cin("secv5.in");
ofstream cout("secv5.out");

unsigned v[1048580];
int n,L,U;

void read()
{
    int i;
    cin>>n>>L>>U;
    for(i=1; i<=n; i++)
        cin>>v[i];
}

unsigned long solve(int k)
{
    int i,j,dif;
    unsigned long sol=0;
    unordered_map < unsigned, int > M;
    j=0;
    dif=0;
    for(i=1; i<=n; i++)
    {
        if(M[v[i]]==0)
            dif++;
        M[v[i]]++;
        while(dif>k)
        {
            j++;
            M[v[j]]--;
            if(M[v[j]]==0)
                dif--;
        }
        sol+=(i-j);
    }
    return sol;
}

int main()
{
    read();
    cout<<(solve(U)-solve(L-1));
    return 0;
}
/*               j
     v[i]: 13 13 7 9 9
                     i

    coada.size() = 3
    coada.dif()  = 2
    in sol se adauga coada.size() la fiecare pas

    sol=1+2+3+2+3
*/