Cod sursa(job #3298358)

Utilizator Rose_MaryTrandafir Maria Rose_Mary Data 29 mai 2025 08:07:32
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

const int NMAX=(1<<20)+1;

struct element
{
    unsigned int val;
    int poz;
};

element v[NMAX];

int n,w[NMAX], ap[NMAX];

ifstream f("secv5.in");
ofstream g("secv5.out");

bool comp(const element& x, element& y )
{
    return x.val<y.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 nrsec=0;
    int nrdif=0,p=1,i;

    for(i=1;i<=n;i++)
        ap[i]=0;

    for(i=1;i<=n;i++)
    {
        if(++ap[w[i]]==1)
        {
            ++nrdif;
        }
        while(nrdif>dif && p<=i)
        {
            if(--ap[w[p]]==0)
                --nrdif;
            ++p;
        }
        nrsec+=i-p+1;
    }
    return nrsec;
}

int main()
{
    int u,l;

    f>>n>>l>>u;

    for(int i=1;i<=n;i++)
    {
        f>>v[i].val;
        v[i].poz=i;
    }

    normalizare();

    g<<calcul(u)-calcul(l-1);

    f.close();
    g.close();
    return 0;
}