Cod sursa(job #1437314)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 17 mai 2015 14:35:42
Problema Secventa 5 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <unordered_map>

#define Nmax 2000000

std::ifstream in("secv5.in");
std::ofstream out("secv5.out");

unsigned A[Nmax], N;

int getResult(int K) {

    int cnt = 0, total = 0, left = 1, right = 1;

    std::unordered_map<unsigned, unsigned> MAP;
    while (1) {

        if (MAP.find(A[right]) == MAP.end()) {
            MAP[A[right]] = 1;
            cnt++;
        } else MAP[A[right]]++;

        while (cnt == K + 1) {

            if (MAP[A[left]] == 1) {
                MAP.erase(A[left]);
                cnt--;
            } else MAP[A[left]]--;

            left++;
        }

        total += (right - left+ 1);

        right++;
        if (right == N + 1) break;
    }

    return total;
}

int main() {

    int L, U;
    in >> N >> L >> U;

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

    out << getResult(U) - getResult(L - 1) << "\n";
    //std::cout << getResult(U) - getResult(L - 1) << "\n";
}