Pagini recente » Cod sursa (job #900902) | Cod sursa (job #1270100) | Cod sursa (job #1231543) | Cod sursa (job #2925851) | Cod sursa (job #1174114)
#include <cstdio>
#include <vector>
#define mod 666013
#define total (1<<20)+5
using namespace std;
struct norme
{
unsigned int r,y;
} v[total];
int n,l,u,i,tot=1;
int p[total];
vector <norme> x[mod];
vector <norme>::iterator it;
inline void adauga(norme rachi)
{
x[rachi.r%mod].push_back(rachi);
}
inline int cauta(unsigned int k)
{
int zum=k%mod;
for(it=x[zum].begin();it!=x[zum].end();it++)
{
if(it->r==k) return it->y;
}
return 0;
}
inline long long secv(int x)
{
int nr=1,last=0;
long long sol=1;
p[v[0].y]=1;
for(i=1;i<n;i++)
{
if(p[v[i].y]==0) nr++,p[v[i].y]=1;
else p[v[i].y]++;
if(nr>x)
{
while(nr!=x)
{
p[v[last].y]--;
if(p[v[last].y]==0) nr--;
last++;
}
}
sol=sol+i-last+1;
}
for(i=0;i<n;i++) p[v[i].y]=0;
if(x==0) return 0;
return sol;
}
int main()
{ freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d",&n,&l,&u);
for(i=0;i<n;i++)
{
scanf("%u",&v[i].r);
v[i].y=cauta(v[i].r);
if(v[i].y==0) v[i].y=tot,tot++;
adauga(v[i]);
}
printf("%lld",secv(u)-secv(l-1));
}