Cod sursa(job #1528414)

Utilizator margikiMargeloiu Andrei margiki Data 19 noiembrie 2015 17:48:40
Problema Secventa 5 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
# include <fstream>
# include <algorithm>
# define NR 1100000
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int i,j,n,m,L,U;
int A[NR], ap[NR];
unsigned int a[NR], cp[NR];
// numarul de secvente cu pana la L elemente diferite
long long numara (int L) {
    long long sol=0, Edif=0;
    int ci=1; ap[A[1]]=1; Edif=1;
    sol=1;

    for (int i=2; i<=n; ++i) {
        ++ap[A[i]]; if (ap[A[i]]==1) ++Edif;
        while (Edif>L) {
            --ap[A[ci]];
            if (ap[A[ci]]==0) --Edif;
            ++ci;
        }
        sol+=i-ci+1;
    }
    //curat
    while (ci<=n) {
        --ap[A[ci]];
        ++ci;
    }


    return sol;
}
int main ()
{
    f>>n>>L>>U;
    for (i=1; i<=n; ++i)
    { f>>a[i]; cp[i]=a[i];}

    sort (cp+1, cp+n+1);
    for (i=1; i<=n; ++i)
        A[i]=lower_bound(cp+1, cp+n+1, a[i])-cp;


    g<<numara(U)-numara(L-1);




    return 0;
}