Cod sursa(job #1786842)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 23 octombrie 2016 19:19:33
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include<cstdio>
#define MOD 100000007
using namespace std;
int h[MOD+5],n,a,b,i,x,v[1000010],nr,vf[1000000],L[1000010];
inline int normalizare(int x)
{
    if(!h[x%MOD])
    {
        nr++;
        h[x%MOD]=nr;
        //vf[nr]++;
        x=nr;
    }
    else
    {
       // vf[h[x%MOD]]++;
        x=h[x%MOD];
    }
    return x;
}
inline int procedura(int a)
{
    for(i=1;i<=n;i++)
        vf[v[i]]=L[i]=0;
    L[1]=1;
    vf[v[1]]++;
    int nr=1,i,sum=0;
    for(i=2;i<=n;i++)
    {
        vf[v[i]]++;
        if(vf[v[i]]==1)
            {
                nr++;
                if(nr>a)
                    {
                        L[i]=L[i-1]+vf[v[i-1]];
                        nr--;
                        vf[v[i-1]]=0;
                    }
                else
                    L[i]=L[i-1];
            }
        else
        {
            L[i]=L[i-1];
        }
    }
    for(i=1;i<=n;i++)
        sum=sum+(i-L[i]+1);
    return sum;
}
int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    cin>>n>>a>>b;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        v[i]=normalizare(x);
    }
    cout<<procedura(b)-procedura(a-1);
}