Cod sursa(job #2467505)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 4 octombrie 2019 15:46:45
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <map>

using namespace std;

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

unordered_map<long long, long long> fr;
long long v[(1 << 20) + 100], n, l, u;

long long getNrSec(long long nrD)
{
    fr.clear();
    long long p1 = 1, p2 = 1, cnt = 0;
    bool ok = 1, enter = 0;
    long long rez = 0;
    while(p2 <= n)
    {
        if((fr.find(v[p2]) == fr.end() || fr[v[p2]] == 0) && ok)
        {
            cnt++;
            enter = 1;
            fr[v[p2]] = 1;
        }

        if(!enter)
            fr[v[p2]]++;

        if(cnt <= nrD)
        {
            ok = 1;
            rez += (p2 - p1 + 1);
            ++p2;
            enter = 0;
        }
        else
        {
            fr[v[p1]]--;
            if(fr[v[p1]] == 0)
                --cnt;
            ++p1;
            ok = 0;
            enter = 1;
        }
    }
    return rez;
}

int main()
{
    fin >> n >> l >> u;

    for(int i = 1; i <= n; ++i)
        fin >> v[i];

    if(l == 1)
        fout << getNrSec(u) << '\n';
    else fout << (getNrSec(u) - getNrSec(l - 1)) << '\n';
    return 0;
}