Cod sursa(job #1147410)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 19 martie 2014 20:08:58
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<fstream>
#include<vector>

using namespace std;

ifstream fin( "secv5.in" );
ofstream fout( "secv5.out" );

const int mod = 666013;
const int nmax = 1<<20;
int v[ nmax + 1 ];

vector <int> h[ mod ];
int main()
{
    int n, a, b, sol, st, dr, key, nrdist;
    bool ok;
    fin>>n>>a>>b;
    sol = st = dr = 0;
    for( int i = 0; i < n; ++ i ) {
        fin>>v[i];
        ok = 1;
        key = v[i] % mod;
        for( int j = 0; j < (int)h[ key ].size(); ++ j ) {
            if ( h[key][j] != -1 && v[ h[key][j] ] == v[ i ] ) {
                ok = 0;
            }
        }

        if ( ok == 1 ) {
            ++ nrdist;
            if ( nrdist > b ) {
                key = v[ st ];
                while ( key == v[ st ] ) {
                    ++ st;
                }
                -- nrdist;
            }

        }
        if ( nrdist >= a ) {
            if ( ok == 1 ) {
                key = v[ dr ];
                while ( v[ dr ] == key ) {
                    ++ dr;
                }
                if ( nrdist == a ) {
                    -- dr;
                } else {
                    key = v[ dr ];
                    while ( v[ dr ] == key ) {
                        ++ dr;
                    }
                    -- dr;
                }
            }
            sol += dr - st + 1;
        }
        h[ v[ i ] % mod ].push_back( i );
    }
    fout<<sol<<'\n';
    fin.close();
    fout.close();
    return 0;
}