Pagini recente » Cod sursa (job #255701) | Cod sursa (job #2584819) | Cod sursa (job #190371) | Cod sursa (job #2589316) | Cod sursa (job #538321)
Cod sursa(job #538321)
#include<stdio.h>
#include<list>
#define Mod 666013
#define Nmax 1050000
#define ui unsigned int
using namespace std;
ui a[Nmax], i, n, U, L, p, dif, S[Nmax], D[Nmax] ;
long long sol ;
char buffer[Nmax<<4], *P;
struct element { ui x, ap ; } ;
list<element> V[Mod] ;
list<element> :: iterator find ( ui x, int r )
{
list<element> :: iterator it ;
for( it = V[r].begin(); it != V[r].end() ; it++ )
if( it->x == x ) return it ;
return V[r].end() ;
}
void push ( ui x )
{
int r = x % Mod ;
list<element> :: iterator it = find(x,r);
if( it == V[r].end() )
{
element e ;
e.x = x ; e.ap = 1 ;
V[r].push_back(e);
dif++;
}
else
it->ap++;
}
void pop ( ui x )
{
int r = x % Mod ;
list<element> :: iterator it = find(x,r);
it->ap-- ;
if( !it->ap )
{
dif--;
V[r].erase(it) ;
}
}
ui number()
{
ui r = 0 ;
while( *P < '0' || *P > '9' ) ++P;
while( *P >= '0' && *P <= '9' )
{
r = r *10 + *P - '0' ;
++P;
}
return r ;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
fread(buffer,1,15000000,stdin);
P = buffer;
n = number();
L = number();
U = number();
for( i = 1 ; i <= n ; i++ )
a[i] = number();
p = 1 ;
for( i = 1 ; i <= n ; i++ )
{
push(a[i]);
while( dif >= L )
{
S[p] = i ;
pop(a[p]);
p++;
}
}
for( i = p ; i <= n ; i++ )
pop(a[i]);
p = 1 ; dif = 0 ;
for( i = 1 ; i <= n ; i++ )
{
push(a[i]);
while( dif > U )
{
D[p] = i - 1 ;
pop(a[p]);
p++;
}
}
for( i = p ; i <= n ; i++ )
if( S[i] ) D[i] = n ;
for( i = 1 ; i <= n && S[i] ; i++ )
sol += D[i] - S[i] + 1 ;
printf("%lld",sol);
return 0;
}