Cod sursa(job #1760613)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 21 septembrie 2016 00:41:10
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#define INF 2140000000
#define MaxN 1<<20
#define MOD 666013
using namespace std;

int N,L,U,X,pos=0,v[MaxN+1],s[MaxN+1];
vector <pair<int,int>> Hash[MOD];
void Add_To_Hash(int nr)
{
	for(int i=0;i<Hash[nr%MOD].size();i++)
		if(Hash[nr%MOD][i].first=nr)
			return;
	Hash[nr%MOD].push_back(make_pair(nr,0));
}
int Search(int nr)
{
	for(int i=0;i<Hash[nr%MOD].size();i++)
		if(Hash[nr%MOD][i].first==nr)return Hash[nr%MOD][i].second;
}
long long seq(int Len)
{
	long long ans=0;
	int d=0,size=0,aux,j=1;
	memset(v,0,MaxN+1);
	if(Len==0)return 0;
	for(int i=1;i<=N;i++)
	{
		aux=Search(s[i]);
		v[aux]++;
		if(v[aux]==1)d++;
		if(d>Len)
			while(d>Len)
				if(--v[Search(s[j++])]==0)
					d--;
		ans+=i-j+1;
	}
	return ans;
}
int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
	
	scanf("%d%d%d",&N,&L,&U);
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&s[i]);
		Add_To_Hash(s[i]);
	}
	for(int i=0;i<MOD;i++)
		for(int j=0;j<Hash[i].size();j++)
			Hash[i][j].second=++pos;
	printf("%lld",seq(U)-seq(L-1));
	return 0;
}