Pagini recente » Cod sursa (job #2814028) | Cod sursa (job #1943772) | Cod sursa (job #1370888) | Cod sursa (job #1189886) | Cod sursa (job #1174112)
#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;
}
char buffer[total*15];
int j;
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d %d %d\n",&n,&l,&u);
fread(buffer,15,total*15,stdin);
for(i=0;i<n;i++)
{ v[i].r=0;
while(buffer[j]!='\n'&&buffer[j]!=0) {v[i].r=v[i].r*10+buffer[j]-'0';j++;}
v[i].y=cauta(v[i].r);
j++;
if(v[i].y==0) v[i].y=tot,tot++;
adauga(v[i]);
}
printf("%lld",secv(u)-secv(l-1));
}