Pagini recente » Cod sursa (job #1585472) | Cod sursa (job #1039534) | Cod sursa (job #1744166) | Cod sursa (job #472244) | Cod sursa (job #536891)
Cod sursa(job #536891)
#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] ;
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 ) ;
}
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%lu %lu %lu",&n,&L,&U);
for( i = 1 ; i <= n ; i++ )
scanf("%lu",&a[i]);
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("%lu",sol);
return 0;
}