Cod sursa(job #1779610)

Utilizator danstefanDamian Dan Stefan danstefan Data 15 octombrie 2016 14:44:46
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define MOD 32767
#define DIM (1<<20)
using namespace std;
int v[DIM],n,l,u,x,in,i,ap[DIM];
vector<int>h[MOD+10];
vector<int>::iterator it;
bool ok;
long long solve(int nr)
{
    int i,j=1,dist=0;
    long long ans=0;
    memset(ap,0,sizeof(ap));
    for(i=1; i<=n; ++i)
    {
        if(ap[v[i]]==0)dist++;
        ap[v[i]]++;
        while(dist>nr)
        {
            ap[v[j]]--;
            if(ap[v[j]]==0)dist--;
            ++j;
        }
        ans+=i-j+1;
    }
    return ans;
}

int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    scanf("%d%d%d",&n,&l,&u);
    for(i=1; i<=n; ++i)
    {
        scanf("%d",&v[i]);
        x=v[i];
        ok=false;
        for(it=h[x%MOD].begin(); it<h[x%MOD].end(); ++it)
            if(*it!=0)
            {
                ok=true;
                break;
            }
        if(!ok)h[x%MOD].push_back(++in);
    }
    for(i=1; i<=n; ++i)
    {
        it=h[v[i]%MOD].begin();
        v[i]=*it;
    }
    printf("%lld\n",solve(u)-solve(l-1));
    return 0;
}