Cod sursa(job #1312341)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 9 ianuarie 2015 12:35:52
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#include <unordered_map>
using namespace std;

typedef long long int64;
typedef unsigned int uint;
const int Nmax = (1 << 20) + 5;

uint n, l, u;
uint v[Nmax];
unordered_map<uint, uint> h;

int64 secv(uint x) {
	int64 result = 0;

	h.clear();
	for (uint st = 1, dr = 1; dr <= n; ++dr) {
		++h[ v[dr] ];
		while (h.size() > x) {
			--h[ v[st++] ];
			if (h[ v[st - 1] ] == 0)
				h.erase(v[st - 1]);
		}
		result += 1LL * (dr - st + 1);
	}

	return result;
}

int main() {
    freopen("secv5.in", "r", stdin);
    freopen("secv5.out", "w", stdout);

    scanf("%u %u %u", &n, &l, &u);
    for (uint i = 1; i <= n; ++i)
        scanf("%u", &v[i]);
	printf("%lld\n", secv(u) - secv(l - 1));

	return 0;
}