Cod sursa(job #2689400)

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

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

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