Cod sursa(job #682811)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 19 februarie 2012 16:07:47
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
#include<queue>
#include<vector>
#define MOD 30773
using namespace std;

queue <unsigned> H[MOD];
vector <unsigned> v;
int n, l, u, nr;

long long Subs(int N){		//nr de subs cu maxim N nr distincte
	int i, j; long long nSub;
	
	for(i = j = nSub = 0; i < n; i++){
		if(H[v[i] % MOD].empty()) nr++;
		H[v[i] % MOD].push(v[i]);
		
		while(nr > N){
			H[v[j] % MOD].pop();
			if (H[v[j++] % MOD].empty()) nr--;
		}
		nSub += i - j + 1;
	}
	
	while(j < n) H[v[j++] % MOD].pop();			//curat hashul
	nr = 0;
	
	return nSub;
}

int main(){
	freopen("secv5.in", "r", stdin), freopen("secv5.out", "w", stdout);
	scanf("%d %d %d", &n, &l, &u);
	int i; unsigned x;
	
	for(i = 0; i < n; i++)
		scanf("%d", &x), v.push_back(x);
	
	printf("%lld\n", Subs(u) - Subs(l-1));
	return 0;
}