Cod sursa(job #2868798)

Utilizator NeganAlex Mihalcea Negan Data 11 martie 2022 10:36:02
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("secv5.in");
ofstream fout("secv5.out");
unsigned int a[1050000];
pair <int, int> nor[1050000];
int f[1050000];

int n, L, U;
long long Nrsec(int L)
{
    long long secv = 0;
    int i, j, cnt = 0;
    j = 1;
    for(i = 1;i <= n;i++)
        f[i] = 0;
    for(i = 1;i <= n;i++)
    {
        f[a[i]]++;
        if(f[a[i]] == 1)
            cnt++;
        while(cnt > L)
        {
            if(f[a[j]] == 1)
                cnt--;
            f[a[j]]--;
            j++;
        }
        secv += i - j + 1;
    }
    return secv;
}

int main()
{
    int i;
    long long sol;
    fin >> n >> L >> U;
    for(i = 1;i <= n;i++)
    {
        fin >> a[i];
        nor[i].first = a[i];
        nor[i].second = i;
    }
    sort(nor + 1, nor + n + 1);
    int val = 0;
    for(i = 1;i <= n;i++)
    {
        if(nor[i].first != nor[i - 1].first)
            val++;
        a[nor[i].second] = val;
    }
    sol = Nrsec(U) - Nrsec(L - 1);
    fout << sol << "\n";
    fout.close();
    return 0;
}