Cod sursa(job #2953351)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 11 decembrie 2022 01:20:34
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
unordered_map<int,int>fr;
int ans,st,dr,nr,v[1000010],i,l,r,n;
int solve(int x)
{
    ans=0;
    fr.clear();
    fr[v[1]]++;
    nr=1;
    st=dr=1;
    while(dr<=n)
    {
        while(dr<=n && nr+(fr[v[dr+1]]>0)<=x)
        {
            dr++;
            if(fr[v[dr]]==0)
                nr++;
            fr[v[dr]]++;
        }
        if(nr==x)
        {
            ans=ans+dr-st;
            fr[v[st]]--;
            if(fr[v[st]]==0)
                nr--;
            st++;
        }
        if(nr>x)
        {
            while(nr>x)
            {
                fr[v[st]]--;
                if(fr[v[st]]==0)
                    nr--;
                st++;
                ans=ans+dr-st;
            }
        }
    }
    return ans;
}
int main()
{
    fin>>n>>l>>r;
    for(i=1; i<=n; i++)
        fin>>v[i];
    fout<<solve(r)-solve(l-1);
    return 0;
}