Cod sursa(job #1255566)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 4 noiembrie 2014 22:16:01
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#define mod 666013
#include <vector>
#define UI unsigned int

using namespace std;

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

void ins(UI x)
{
    vector<pair<UI,UI> > :: 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(UI x)
{
    vector<pair<UI,UI> > :: 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--;

   }



}


long long 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("%u",&a[i]);


    printf("%lld\n",1LL*Kalc(l)-1LL*Kalc(u-1));



    return 0;
}