Cod sursa(job #775518)

Utilizator rzvrzvNicolescu Razvan rzvrzv Data 8 august 2012 12:50:16
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>
#include<utility>
#include<algorithm>

using namespace std;

int used[1000002],x[1000002],n,L,U,i;
pair < unsigned , int > a[1000002];

inline int numar(int k)
{
    int r,l,nr;
    int nrused;
    nrused=0;
    nr=0;
    for (r=l=0;r<n;r++)
    {
        if (used[x[r]]==0)
        {
            nrused++;
        }
        used[x[r]]++;
        while(nrused>k)
        {
            used[x[l]]--;
            if (used[x[l]]==0)
                nrused--;
            l++;
        }
        nr+=r-l+1;
    }
    return nr;
}

int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    scanf("%d%d%d",&n,&L,&U);
    for (i=0;i<n;i++)
    {
        scanf("%u",&a[i].first);
        a[i].second=i;
    }
    sort(a,a+n);
    int j=0;
    x[a[0].first]=0;
    for (i=1;i<n;i++)
    {
        if (a[i].first!=a[i-1].first)
        {
            j++;
        }
        x[a[i].second]=j;
    }
    j=numar(L-1);
    printf("%d\n",numar(U)-j);
    return 0;
}