Pagini recente » Cod sursa (job #2170793) | Cod sursa (job #471920) | Cod sursa (job #1424125) | Cod sursa (job #897507) | Cod sursa (job #1142516)
#include<stdio.h>
#include<vector>
using namespace std;
#define modulo 666013
#define nmax (1<<20)+5
struct element{unsigned int x, poz;};
long long n, l, u, i, ult, r, poz, nrel, nrd, rez;
unsigned int v[nmax], nr[nmax], x;
vector <element> h[modulo+5];
vector <element> ::iterator it;
element el;
void citire()
{
scanf("%lld %lld %lld",&n,&l,&u);
for (i=1;i<=n;i++)
{
scanf("%lld",&x);
r=x%modulo; poz=0;
for (it=h[r].begin();it!=h[r].end();it++)
if ((*it).x==x)
{ poz=(*it).poz; break; }
if (poz==0)
{
nrel++; poz=nrel;
el.x=x; el.poz=nrel;
h[r].push_back(el);
}
v[i]=poz;
}
}
long long calculare(long long x)
{
ult=nrd=rez=0;
for (i=1;i<=n;i++)
{
while(1)
{
ult++;
nr[v[ult]]++;
nrd+=(nr[v[ult]]==1);
if ((nrd>x)||(ult==n+1))
break;
}
nr[v[ult]]--; nrd-=(nr[v[ult]]==0);
ult--;
rez+=ult-i+1;
nr[v[i]]--; nrd-=(nr[v[i]]==0);
}
return rez;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
citire();
printf("%lld",calculare(u)-calculare(l-1));
return 0;
}