Pagini recente » Cod sursa (job #939936) | Monitorul de evaluare | Cod sursa (job #2344080) | Cod sursa (job #959878) | Cod sursa (job #1255423)
/*
* Code by Spiromanul
*/
#include <fstream>
#include <tr1/unordered_map>
const char IN [ ] = "secventa5.in" ;
const char OUT [ ] = "secventa5.out" ;
const int MAX = ( 1 << 20 ) + 14 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
typedef tr1 :: unordered_map < int , int > H ;
int v [ MAX ] ;
int cnt ( int n , int lim )
{
int st , dr ;
H hashin ;
long long cnt = 0 ;
for ( st = 1 , dr = 1 ; dr <= n ; ++ dr )
{
hashin [ v [ dr ] ] ++ ;
while ( ( int ) hashin.size ( ) > lim )
{
tr1 :: unordered_map < int , int > :: iterator it = hashin.find ( v [ st ++ ] ) ;
if ( ! -- it -> second )
hashin.erase ( it ) ;
}
cnt += dr - st + 1 ;
}
return cnt ;
}
int main( )
{
int n , l , u ;
fin >> n >> l >> u ;
for ( int i = 1 ; i <= n ; ++ i )
fin >> v [ i ] ;
fout << cnt ( n , u ) - cnt ( n , l - 1 ) << '\n' ;
return 0;
}