Pagini recente » Cod sursa (job #1899065) | Cod sursa (job #2884412) | Cod sursa (job #1951682) | Cod sursa (job #138369) | Cod sursa (job #536893)
Cod sursa(job #536893)
#include<stdio.h>
#include<vector>
#define Mod 666013
#define Nmax 1050000
#define ui unsigned int
using namespace std;
ui a[Nmax], i, n, U, L, sol, p, dif, S[Nmax], D[Nmax] ;
char buffer[Nmax<<4], *P;
struct element { ui x, ap ; } ;
vector<element> V[Mod] ;
int find ( ui x )
{
int r = x % Mod ;
int N = V[r].size() , i ;
for( i = 0 ; i < N ; i++ )
if( V[r][i].x == x ) return i ;
return N ;
}
void push ( ui x )
{
int r = x % Mod ;
int N = V[r].size() ;
int i = find(x) ;
if( i == N )
{
element e ;
e.x = x ; e.ap = 1 ;
V[r].push_back(e);
dif++;
}
else
V[r][i].ap++;
}
void pop ( ui x )
{
int r = x % Mod ;
int i = find(x);
V[r][i].ap--;
if( !V[r][i].ap )
{
dif--;
V[r].erase(V[r].begin() + i ) ;
}
}
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);
//scanf("%u %u %u",&n,&L,&U);
//for( i = 1 ; i <= n ; i++ )
// scanf("%u",&a[i]);
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("%u",sol);
return 0;
}