Cod sursa(job #858110)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 18 ianuarie 2013 15:50:30
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<fstream>
#include<algorithm>
using namespace std;
 
struct st
{
    unsigned int x;
    int y;
};
 
st a[1100000];
int v[1100000],b[1100000],w[1100000],i,j,k,l,u,n,p,q,t;
long long s;
 
bool cmp1(st a,st b)
{
    return a.x<b.x;
}
 
int main()
{
    ifstream f("secv5.in");
    ofstream g("secv5.out");
    f >> n >> l >> u;
    for (i=1;i<=n;i++)
    {
        f >> a[i].x;
        a[i].y=i;
    }
    sort(a+1,a+n+1,cmp1);
    for (i=1;i<=n;i++)
    {
        if (a[i].x!=a[i-1].x)
            k++;
        b[a[i].y]=k;
    }
    k=0;t=0;p=1;q=1;
    for (i=1;i<=n;i++)
    {
        if (v[b[i]]==0)
        {
            v[b[i]]=1;
            k++;
        }
        else v[b[i]]++;
        while (k>u)
        {
            v[b[p]]--;
            if (v[b[p]]==0)
                k--;
            p++;
        }
        if (w[b[i]]==0)
        {
            w[b[i]]=1;
            t++;
        }
        else w[b[i]]++;
        while ((t>l) || (w[b[q]]>1))
        {
            w[b[q]]--;
            if (w[b[q]]==0)
                t--;
            q++;
        }
        if (k>=l)
            s+=q-p+1;
    }
    g << s;
    return 0;
}