Cod sursa(job #536933)

Utilizator loginLogin Iustin Anca login Data 19 februarie 2011 19:46:21
Problema Secventa 5 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
# include <fstream>
# include <iostream>
# include <algorithm>
# define DIM 1050000
using namespace std;
int n, l, u, p[DIM], a[DIM], cx[DIM], cy[DIM], sol;
unsigned v[DIM];

void read ()
{
	ifstream fin ("secv5.in");
	fin>>n>>l>>u;
	for(int i=1;i<=n;++i)
		fin>>v[i], p[i]=i;
}

bool inline cmp (int i, int j)
{
	if (v[i]<v[j])return true;
	return false;
}

void uniform()
{
	sort(p+1, p+n+1, cmp);
	int q=0;
	for(int i=1;i<=n;++i)
		if (v[p[i]]!=v[p[i-1]])
			a[p[i]]=++q;
		else
			a[p[i]]=q;
}

void solve ()
{
	int nx=0, ny=0, x=1, y=1;
	for(int i=1;i<=n;++i)
	{
		if (!cx[a[i]])
			++nx;
		++cx[a[i]];
		while (nx>=l && x<=i)
		{
			--cx[a[x]];
			if (!cx[a[x]])
				--nx;
			++x;
		}
		if (!cy[a[i]])
			++ny;
		++cy[a[i]];
		while (ny>u && y<=i)
		{
			--cy[a[y]];
			if (!cy[a[y]])
				--ny;
			++y;
		}
		if (nx==l-1 && ny<=u && ny>=l)
			sol+=x-y;
	}
}

int main ()
{
	read ();
	uniform();
	solve ();
	ofstream fout ("secv5.out");
	fout<<sol;
	return 0;
}