Cod sursa(job #2848955)

Utilizator mateitudordmDumitru Matei mateitudordm Data 14 februarie 2022 12:07:55
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
#define nmax 1005000
#define int long long

using namespace std;

int v[nmax + 1], c[nmax + 1];
map<int, int> f;

signed main()
{
    ifstream cin("secv5.in");
    ofstream cout("secv5.out");
    int n, l, u, p = 0, a, i, st, dr, s = 0, cnt = 0;
    cin >> n >> l >> u;
    for (i = 1; i <= n; i++)
    {
        cin >> a;
        if (a == v[p])
            c[p]++;
        else
            ++p, v[p] = a, c[p] = 1;
    }
    n = p;
    // for (i = 1; i <= n; i++)
    // cout << v[i] << " " << c[i] << endl;
    for (i = 1; i <= n && f.size() < l; i++)
        f[v[i]]++, s += c[i];
    st = 1, dr = i;
    while (st <= n)
    {
        while (dr <= n && f.size() < u)
            f[v[dr]]++, s += c[dr], dr++;
        // cout << st << " " << dr << " " << f.size() << endl;
        if (f.size() <= u && f.size() >= l)
            cnt += max((s - c[st]), 1LL) * c[st];
        s -= c[st], f.erase(v[st]), st++;
    }
    cout << cnt;
    return 0;
}