Cod sursa(job #3138030)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 17 iunie 2023 10:36:49
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
unordered_map <long long ,int> fr;
int i,n,l,u,nrc,a[1048577],b[1048577],st,dr;
long long v[1048577];
long long sol;
int main ()
{
    fin>>n>>l>>u;
    l--;
    for (i=1; i<=n; i++)
        fin>>v[i];
    st=1;
    for (i=1; i<=n; i++)
    {
        dr=i;
        fr[v[i]]++;
        if (fr[v[i]]==1)
            nrc++;
        while (nrc>l)
        {
            fr[v[st]]--;
            if (fr[v[st]]==0)
                nrc--;
            st++;
        }
        a[i]=dr-st+1;
    }
    fr.clear ();
    nrc=0;
    st=1;
    for (i=1; i<=n; i++)
    {
        dr=i;
        fr[v[i]]++;
        if (fr[v[i]]==1)
            nrc++;
        while (nrc>u)
        {
            fr[v[st]]--;
            if (fr[v[st]]==0)
                nrc--;
            st++;
        }
        b[i]=dr-st+1;
    }
    for (i=1; i<=n; i++)
        sol+=b[i]-a[i];
    fout<<sol;
    return 0;
}