Cod sursa(job #3305451)

Utilizator unomMirel Costel unom Data 1 august 2025 17:51:55
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <map>

using namespace std;

#define int long long

ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, l, u;
int v[1050005];

int numara(int k)
{
    //il folosim exact ca pe un vector de frecventa normal
    //doar ca ocupa mult mai putina memorie
    map<long long, int> fr; //operatiile tin O(log) timp

    int s = 1;
    int d = 0;
    int nrelem = 0;
    int cnt = 0; //numarul de subsecvente cu <= k elemente distincte

    while (d<n){
        while (nrelem!=k && d<n){
            d++;
            fr[v[d]]++;
            if (fr[v[d]]==1){
                nrelem++;
            }
        }
        cnt+=(d - s + 1);
        fr[v[s]]--;
        if (fr[v[s]]==0){
            nrelem--;
        }
        s++;
    }

    while(s <= n)
    {
        cnt += (d - s + 1);
        s++;
    }

    return cnt;
}

signed main()
{
    fin>>n>>l>>u;
    for(int i = 1; i<=n; i++)
    {
        fin>>v[i];
    }

    fout<<numara(u) - numara(l - 1); //adica fix cate subsecvente au intre l si u numere distincte

    return 0;
}