Cod sursa(job #911335)

Utilizator ELHoriaHoria Cretescu ELHoria Data 11 martie 2013 15:46:18
Problema Secventa 5 Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <map>

using namespace std;
 
ifstream cin("secv5.in");
ofstream cout("secv5.out");

map<unsigned int,int> h;
int N, L, U;
int K;
int a[1<<20], c[2][1<<20];

inline int getIndex(const unsigned int &val) {
	if(h[val] != 0) {
		return h[val];
	}
	return h[val] = ++K;
}

int main()
{
	cin>>N>>L>>U;
	unsigned int val;
	for(int i = 0;i < N;i++) {
		cin>>val;
		a[i] = getIndex(val);
	}
	int l, u;
	int nl, nu;
	nl = nu = 0;
	l = u = 0;
	long long ans = 0;
	for(int i = 0;i < N;i++) {
		while(l < N && nl < L) {
			nl += ((c[0][a[l++]]++) == 0);
		}
		while(u < N && nu + ( c[1][a[u]] == 0) <= U) {
			nu += ( (c[1][a[u++]]++) == 0);
		}
		if(nl >= L) {
			ans += (u - l + 1);
		}
		nl -= ((--c[0][a[i]]) == 0);
		nu -= ((--c[1][a[i]]) == 0);
	
	}
	cout<<ans;
    return 0;
}