Cod sursa(job #2689412)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 20 decembrie 2020 17:41:38
Problema Secventa 5 Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <map>
using namespace std;
long long n, v[ 1 << 20 + 1 ];
map< long long, long long > a;

long long caca( long long limita ){
    long long rez = 0;
    long long i = 0, cate = 0, st = 0;
    for( ; i < n; i++ ){
        if( !a[ v[ i ] ] )
            while( st <= i && cate == limita ){
                --a[ v[ st ] ];
                if( a[ v[ st ] ] == 0 )
                    --cate;
                ++st;
            }
        if( !a[ v[ i ] ] )
            ++cate;
        ++a[ v[ i ] ];
        rez += i - st + 1;
    }
    a.clear();
    return rez;
}

int main()
{
    long long st, dr;
    ifstream cin( "secv5.in" );
    cin >> n >> st >> dr;
    for( long long i = 0; i < n; i++ )
        cin >> v[ i ];
    cin.close();
    ofstream cout( "secv5.out" );
    cout << caca( dr ) - caca( st - 1 ) << '\n';
    return 0;
}