Cod sursa(job #1569457)

Utilizator Ionut228Ionut Calofir Ionut228 Data 15 ianuarie 2016 16:33:27
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.04 kb
#include <fstream>
#include <map>

using namespace std;

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

int N, L, U;
int V[1100000];
map<int, int> H;

long long max_secv(int M)
{
    H.clear();

    long long sol = 0;
    int lg = 0, dist = 0, pos = 1;

    for (int i = 1; i <= N; ++i)
    {
        if (H[V[i]])
        {
            ++H[V[i]];
            ++lg;
            sol += 1LL * lg;
        }
        else
        {
            ++H[V[i]];
            ++dist;
            ++lg;

            if (dist > M)
            {
                while (dist > M)
                {
                    --H[V[pos]];
                    if (!H[V[pos]])
                        --dist;

                    --lg;
                    ++pos;
                }
            }

            sol += 1LL * lg;
        }
    }

    return sol;
}

int main()
{
    fin >> N >> L >> U;
    for (int i = 1; i <= N; ++i)
        fin >> V[i];

    fout << max_secv(U) - max_secv(L - 1) << '\n';

    return 0;
}