Cod sursa(job #2735378)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 2 aprilie 2021 12:24:43
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX((1 << 20) + 5);
int v[NMAX], n, l, u;

long long nrSecv(int lim)
{
    if(lim == 0)
        return 0;
    unordered_map<int, int> mp;
    int p1 = 1, p2 = 1;
    long long rez = 1;
    mp[v[p1]] = 1;
    int nrD = 1;
    while(p2 < n)
    {
        ++p2;
        if(mp.find(v[p2]) == mp.end())
            ++nrD;
        mp[v[p2]]++;
        if(nrD <= lim)
            rez += p2 - p1 + 1;
        else
        {
            while(p1 < p2 && nrD > lim)
            {
                if(mp[v[p1]] == 1)
                    --nrD;
                --mp[v[p1]];
                ++p1;
            }
            rez += p2 - p1 + 1;
        }
    }
    return rez;
}

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

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

    fout << nrSecv(u) - nrSecv(l - 1) << '\n';
    return 0;
}