Cod sursa(job #1254946)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 3 noiembrie 2014 19:54:32
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <cstdio>
#define mod 666013
#include <vector>

using namespace std;

int a[(1<<20)+6],u,l,i,n,distinct;
vector< pair<int,int> > h[mod+5];

void ins(int x)
{
    vector<pair<int,int> > :: iterator it;

   for(it=h[x%mod].begin();it!=h[x%mod].end();++it)
   if(it->first==x)
   {
       it->second++;
       if(it->second==1) distinct++;
       return;

   }

   h[x%mod].push_back(make_pair(x,1));++distinct;

}

void del(int x)
{
    vector<pair<int,int> > :: iterator it;

   for(it=h[x%mod].begin();it!=h[x%mod].end();++it)
   if(it->first==x)
   {
       it->second--;
       if(it->second==0) distinct--;

   }



}


int Kalc(int k)
{
     int dr=1,st=1,i;
     distinct=0;

     for(i=0;i<mod;++i)
     h[i].clear();

     long long SOL=0LL;

     while(dr<=n)
     {
         ins(a[dr]);
         while(distinct>k)
         {
            del(a[st]);
            st++;
         }
         SOL+=1LL*(dr-st+1);

         ++dr;
     }

    return SOL;

}


int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);

    scanf("%d%d%d",&n,&u,&l);

    for(i=1;i<=n;++i)
    scanf("%d",&a[i]);


    printf("%d\n",Kalc(l)-Kalc(u-1));



    return 0;
}