Cod sursa(job #3273854)

Utilizator mateilucaLuca Matei Gabriel mateiluca Data 4 februarie 2025 10:22:27
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, l, u, L[1100005], U[1100005];
unsigned int a[1100005];
unsigned long long sol;
unordered_map<unsigned int, int> M;

int main()
{
    int i, j, cnt;
    fin >> n >> l >> u;
    for(i = 1;i <= n;i++)
        fin >> a[i];
    j = 1;cnt = 0;
    for(i = 1;i <= n;i++)
    {
        if(M[a[i]] == 0) cnt++;
        M[a[i]]++;
        while(cnt > l)
        {
            if(M[a[j]] == 1) cnt--;
            M[a[j]]--;
            j++;
        }
        while(cnt == l && M[a[j]] > 1)
        {
            M[a[j]]--;
            j++;
        }
        if(cnt == l)
            L[i] = j;
    }
    M.clear();
    j = 1;cnt = 0;
    for(i = 1;i <= n;i++)
    {
        if(M[a[i]] == 0) cnt++;
        M[a[i]]++;
        while(cnt > u)
        {
            if(M[a[j]] == 1) cnt--;
            M[a[j]]--;
            j++;
        }
        U[i] = j;
    }
    for(i = 1;i <= n;i++)
        if(L[i] > 0)
            sol += (L[i] - U[i] + 1);
    fout << sol << "\n";
    fout.close();
    return 0;
}