Cod sursa(job #1714041)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 7 iunie 2016 11:04:22
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

constexpr int MAX_N = 1 << 20;

array<unsigned int, MAX_N> A;
int N, L, U;

long long countDistinct(int NR)
{
    unordered_map<unsigned int,int> Map;
    Map.reserve(4096);
    Map.max_load_factor(0.5);

    int j = 0;
    long long answer = 0;

    for (int i = 0; i < N; ++i)
    {
        ++Map[ A[i] ];

        while (static_cast<int>(Map.size()) > NR)
        {
            --Map[ A[j] ];

            if (Map[ A[j] ] == 0)
                Map.erase(A[j]);
            j++;
        }

        answer += i - j + 1;
    }

    return answer;
}

int main()
{
    ifstream in("secv5.in");
    ofstream out("secv5.out");

    in >> N >> L >> U;

    for (int i = 0; i < N; ++i)
        in >> A[i];

    out << countDistinct(U) - countDistinct(L - 1) << endl;

    return 0;
}