Cod sursa(job #1714036)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 7 iunie 2016 10:57:21
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

constexpr int MAX_N = 1 << 20;

int A[MAX_N];
int N, L, U;

long long countDistinct(int NR)
{
    map<int,int> Map;

    int j = 1;
    long long answer = 0;

    for (int i = 1; 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 = 1; i <= N; ++i)
        in >> A[i];

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

    return 0;
}