Cod sursa(job #2038982)

Utilizator cosmindascaluDascalu Cosmin cosmindascalu Data 14 octombrie 2017 10:27:43
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

unsigned a[1024 * 1024 + 20], n;
int L, U;

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

void Citire()
{
    fin >> n >> L >> U;
    for(int i = 1; i <= n; i++)
        fin >> a[i];
}

/// Cate secvente au cel mult k - valori distincte
long long NrSecvente(int k)
{
    unordered_map <unsigned, int> M;
    int i, j, x;
    long long contor = 0;
    i = 1;
    for(j = 1; j <= n; j++)
    {
        M[a[j]]++;
        while (M.size() > k)
        {
            x = a[i];
            i++;
            M[x]--;
            if (M[x] == 0) M.erase(x);
        }

        /// Adaug cele j - i + 1 secvente ce se term. cu a[j];
        contor += (j - i + 1);
    }
    return contor;
}

int main()
{
    Citire();
    fout << NrSecvente(U) - NrSecvente(L - 1);
    return 0;
}