Cod sursa(job #9623)

Utilizator vlad_DVlad Dumitriu vlad_D Data 27 ianuarie 2007 16:27:19
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 0.9 kb
/*
by vlad D.
   :)
*/
#include <cstdio>
#include <set>
using namespace std;
long long ret;
int N, A, B;
int sol[1048588];
set<int> Q;
int i, j;
int main() {
	freopen("secv5.in", "r", stdin);
	freopen("secv5.out", "w", stdout);
	scanf("%d %d %d", &N, &B, &A);
	for (i=0; i<N; i++) {
		int X;
		scanf("%d", &X);
		if (Q.find(X) == Q.end()) {Q.insert(X); sol[i+1] = sol[i] + 1;} 
		else sol[i+1] = sol[i];
		}
	Q.clear();
	//for (i=1; i<=N; i++) printf("%d ", sol[i]);
	B--;
	int lw = 0;
	for (i=1; i<=N; i++) {
		int da = 0;
		while (lw <=i && sol[i] - sol[lw] >= A) {da = 1; lw++;}
		if (da) lw--;
		//printf("ll : d %d\n", i, lw);
		ret+= i - lw;
		}
	//printf("ret: %lld\n", ret);
	if (B > 0) {
	lw = 0;
	for (i=1; i<=N; i++) {
		int da = 0;
		while (lw <=i && sol[i] - sol[lw] >= B) {da = 1; lw++;}
		if (da) lw--;
		ret-=i - lw;
	}}
	printf("%lld\n", ret);
	return 0;
}