Cod sursa(job #857964)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 18 ianuarie 2013 14:19:48
Problema Secventa 5 Scor 90
Compilator cpp Status done
Runda ichb-locala-2013-10 Marime 0.89 kb
#include<fstream>
#include<algorithm>
using namespace std;

struct st
{
	unsigned int x,y;
};

st a[1100000];
int v[1100000],b[1100000],w[1100000],i,j,k,l,u,n,p,q,t;
long long s;

bool cmp1(st a,st b)
{
	return a.x<b.x;
}

int main()
{
	ifstream f("secv5.in");
	ofstream g("secv5.out");
	f >> n >> l >> u;
	for (i=1;i<=n;i++)
	{
		f >> a[i].x;
		a[i].y=i;
	}
	sort(a+1,a+n+1,cmp1);
	for (i=1;i<=n;i++)
	{
		if (a[i].x!=a[i-1].x)
			k++;
		b[a[i].y]=k;
	}
	k=0;t=0;p=1;q=1;
	for (i=1;i<=n;i++)
	{
		if (v[b[i]]==0)
		{
			v[b[i]]=1;
			k++;
		}
		else v[b[i]]++;
		while (k>u)
		{
			v[b[p]]--;
			if (v[b[p]]==0)
				k--;
			p++;
		}
		if (w[b[i]]==0)
		{
			w[b[i]]=1;
			t++;
		}
		else w[b[i]]++;
		while ((t>l) || (w[b[q]]>1))
		{
			w[b[q]]--;
			if (w[b[q]]==0)
				t--;
			q++;
		}
		if (k>=l)
			s+=q-p+1;
	}
	g << s;
	return 0;
}