Cod sursa(job #993607)

Utilizator LauraAb.Laura Abef LauraAb. Data 4 septembrie 2013 10:26:36
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

int n,l,u;
int a[1050000];
int fr1[1050000],fr2[1050000];
long long c1,c2,st,dr1,dr2,sol,p;
int aux[1050000];

void Citire()
{
    int i;
    f>>n>>l>>u;
    for(i=1;i<=n;i++)
        f>>a[i];
}

inline void Normalizarea()
{
    int i;
    for (i=1; i<=n; i++)
        aux[i] = a[i];
    sort(aux+1, aux+n+1);
    for (i=1; i<=n; i++)
        a[i] = lower_bound(aux+1, aux+n+1, a[i]) - aux;
}



void Problema()
{
    fr1[a[1]]=fr2[a[1]]=1;
    c1=c2=1;
    dr1=1;
    dr2=1;
    st=1;

    while(dr1<=n)
    {
        if(c1<l)
        {
            ++dr1;
            if(++fr1[a[dr1]]==1)
            ++c1;
        }

        if(c2<=u && dr2<=n)
        {
            ++dr2;
            if (dr2<=n)
                if(++fr2[a[dr2]]==1)
                    ++c2;
        }

        else
        if (c1==l && c2<=u+1)
        {
            sol+=dr2-dr1;

            if(--fr1[a[st]]==0)
            --c1;
            if(--fr2[a[st]]==0)
            --c2;
            ++st;
        }
    }
    g<<sol<<"\n";
}

int main()
{
    Citire();
    Normalizarea();
    Problema();
    f.close();
    g.close();
    return 0;
}