Cod sursa(job #536924)

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

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 (!c[a[i]])
			++nx, ++ny;
		++c[a[i]];
		while (nx>=l && x<=i)
		{
			--c[a[x]];
			if (!c[a[x]])
				--nx;
			++x;
		}
		while (ny>u && y<=i)
		{
			--c[a[y]];
			if (!c[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;
}