Cod sursa(job #3125597)

Utilizator andreea0146Nicula Andreea andreea0146 Data 3 mai 2023 20:21:47
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int nMAX = (1 << 20) + 1;
ifstream fin("secv5.in");
ofstream fout("secv5.out");

struct Element
{
    int val,poz;
};
Element v[nMAX];
int w[nMAX], f[nMAX],n;

bool comp (const Element &a, const Element &b)
{
    return a.val < b.val;
}

void normalizare()
{
    sort(v+1,v+n+1,comp);
    int x=1;
    w[v[1].poz]=1;
    for (int i=2; i<=n; i++)
    {
        if (v[i].val!=v[i-1].val)
            x++;
        w[v[i].poz]=x;
    }
}

long long calcul(int dif)
{
    long long nrs=0;
    int nrd=0,p=1;
    for (int i=1; i<=n; i++)
        f[i]=0;
    for(int i=1; i<=n; i++)
    {
        if(++f[w[i]]==1)
            ++nrd;
        while(nrd>dif&&p<=i)
        {
            if (--f[w[p]]==0)
                --nrd;
            ++p;
        }
        nrs+=i-p+1;
    }
    return nrs;
}

int main()
{
    int l, u;
    fin >> n >> l >> u;
    for (int i=1; i<=n; i++)
    {
        fin >> v[i].val;
        v[i].poz = i;
    }
    normalizare();

    fout << calcul(u) - calcul(l-1);
    return 0;
}