Pagini recente » Cod sursa (job #2145616) | Cod sursa (job #1484353) | Cod sursa (job #750617) | Cod sursa (job #390429) | Cod sursa (job #120627)
Cod sursa(job #120627)
#include <cstdio>
#define fin "secv5.in"
#define fout "secv5.out"
#define DBxG
#define FL
const int Mod = 672331;
const int Nmax = 1111100;
struct inf {
unsigned int val;
int id;
inf *next;
};
inf *hash[Mod];
int N,U,L,K;
unsigned int v[Nmax];
long long ret;
int frcv1[Nmax],frcv2[Nmax];
void readdata()
{
int i,j;
char buff[1024];
unsigned int nr;
freopen(fin,"r",stdin);
scanf("%d%d%d",&N,&L,&U);
nr = 0;
j=0;
while ( ! feof(stdin) )
{
fread(buff,1,1024,stdin);
for (i=0;i<1024;++i)
{
if ( '0' <= buff[i] && buff[i] <= '9' )
nr = nr * 10 + buff[i] - '0';
else
{
if (nr)
v[++j]=nr;
nr=0;
}
}
}
}
void inithash()
{
int i;
for (i=0;i<Mod;++i)
{
hash[i] = new inf;
hash[i] -> next = NULL;
}
}
void insert(int p)
{
inf *it,*nou;
it = hash[v[p] % Mod];
while ( it -> next != NULL )
{
if ( it -> next -> val == v[p] )
{
v[p] = it -> next -> id;
return ;
}
it = it -> next;
}
if ( it -> next == NULL )
{
nou = new inf;
nou -> val = v[p];
nou -> id = ++K;
nou -> next= NULL;
v[p] = K;
it -> next = nou;
}
}
void normalizeaza()
{
int i;
inithash();
for (i=1;i<=N;++i)
insert(i);
#ifdef DBG
for (i=1;i<=N;++i)
printf("%u ",v[i]);
printf("\n");
#endif
}
void solve()
{
int i,st,dr,cnt1,cnt2;
st=1;
dr=1;
cnt1=cnt2=0;
for (i=1;i<=N;++i)
{
++frcv1[ v[i] ];
++frcv2[ v[i] ];
if ( frcv1[v[i]] == 1 )
++cnt1;
if ( frcv2[v[i]] == 1 )
++cnt2;
while ( cnt1 > U )
{
--frcv1[ v[st] ];
if ( frcv1[ v[st] ] == 0 )
--cnt1;
++st;
}
while ( cnt2 >= L )
{
--frcv2[ v[dr] ];
if ( frcv2[ v[dr] ] == 0 )
--cnt2;
++dr;
}
if ( dr > st )
ret = ret + dr - st;
}
#ifdef FL
freopen(fout,"w",stdout);
#endif
printf("%lld\n",ret);
}
int main()
{
readdata();
normalizeaza();
solve();
return 0;
}