Cod sursa(job #1255425)

Utilizator xtreme77Patrick Sava xtreme77 Data 4 noiembrie 2014 19:43:04
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
/*
 * Code by Spiromanul
 */

#include <fstream>
#include <tr1/unordered_map>

const char IN  [ ] = "secv5.in" ;
const char OUT [ ] = "secv5.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;
}