Cod sursa(job #1214509)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 30 iulie 2014 16:45:07
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

ifstream is("secv5.in");
ofstream os("secv5.out");

#define MOD 666013

void Normalize();
long long Compute(int);
void Debug();

vector <pair<int,int> > H[666003];
int N, L, U, x, a, b;
int V[1024*1024+5];
int Frv[1024*1024+5];

int main()
{
    Normalize();
    os << Compute(U) - Compute(L-1);

    is.close();
    os.close();
}

void Normalize()
{
    is >> N >> L >> U;
    for ( int i = 1; i <= N; ++i )
    {
        is >> x;    a = 0;
        for ( int j = 0; j < H[x%MOD].size(); ++j )
            if ( H[x%MOD][j].first == x )
                a = H[x%MOD][j].second;;
        if ( a == 0 )
        {
            b++;
            a = b;
            H[x%MOD].push_back(make_pair(x,a));
        }
        V[i] = a;
    }
}

long long Compute(int X)
{
    long long sol(0);
    int bg,nrd(0),it(0);

    for ( int i = 1; i <= N; ++i )
    {
        while ( nrd <= X && it <= N )
        {
            ++it;
            Frv[V[it]]++;
            if ( Frv[V[it]] == 1 )
                nrd++;
        }

        Frv[V[it]]--;
        nrd--;
        Frv[V[i]]--;
        if ( Frv[V[i]] == 0 )
            nrd--;
        it--;
        sol += (it-i+1);
    }

    return sol;
}

void Debug()
{
    for ( int i = 1; i <= N; ++i )
        os << V[i] << " ";
}