Cod sursa(job #2540645)

Utilizator VladPislaruPislaru Vlad Rares VladPislaru Data 7 februarie 2020 13:47:49
Problema Secventa 5 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
unsigned int a[1050000]; /// a[(1<<20) + 3]
int n, L, U;

/// ret. numarul de secvente care au cel mult X
/// elemente distincte
long long NrSecv(int X)
{
    unordered_map<unsigned int, int> M;
    int i, j, nrD = 0;
    long long sol = 0;
    j = 1;
    for (i = 1; i <= n; i++)
    {
        M[a[i]]++;
        if (M[a[i]] == 1) nrD++;
        while (nrD > X)
        {
            M[a[j]]--;
            if (M[a[j]] == 0) nrD--;
            j++;
        }
        sol = sol + (i - j + 1);
    }
    return sol;
}

int main()
{
    int i;
    long long cnt;
    fin >> n >> L >> U;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    cnt = NrSecv(U) - NrSecv(L - 1);
    fout << cnt;

    return 0;
}