Cod sursa(job #2950474)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 3 decembrie 2022 20:03:23
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <unordered_map>

using namespace std;

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

#define int long long

const int max_size = (1 << 20) + 1;

int a[max_size], n;
unordered_map <int, int> m;

int solve (int dif)
{
    m.clear();
    int st = 1, ans = 0, ct = 0;
    for (int i = 1; i <= n; i++)
    {
        if (m[a[i]] == 0)
        {
            ct++;
        }
        m[a[i]]++;
        while (st <= i && ct > dif)
        {
            m[a[st]]--;
            if (m[a[st]] == 0)
            {
                ct--;
            }
            st++;
        }
        ans += i - st + 1;
        //out << i << " " << st << '\n';
    }
    return ans;
}

signed main ()
{
    int l, u;
    in >> n >> l >> u;
    for (int i = 1; i <= n; i++)
    {
        in >> a[i];
    }
    out << solve(u) - solve(l - 1);
    in.close();
    out.close();
    return 0;
}