Cod sursa(job #2093723)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 24 decembrie 2017 13:24:48
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <unordered_map>

using namespace std;

const int Buffer=1<<20;
char pars[Buffer];
int poz_pars,v[1048580],n;
unordered_map<int,int> q;

void inc()
{
    poz_pars++;
    if(poz_pars==Buffer)
    {
        fread(pars,1,Buffer,stdin);
        poz_pars=0;
    }
}

int read()
{
    for(;pars[poz_pars]<'0' or pars[poz_pars]>'9';inc());
    int s=0;
    for(;pars[poz_pars]>='0' && '9'>=pars[poz_pars];inc()) s=s*10+pars[poz_pars]-'0';
    return s;
}

long long solve(int l)
{
    if(l==0) return 0;
    int poz=1,nr=0;
    long long sol=0;
    for(int i=1;i<=n;i++)
    {
        while(poz<=n)
        {
            if(q[v[poz]]==0 && nr==l) break;
            q[v[poz]]++;
            if(q[v[poz]]==1) nr++;
            poz++;
        }
        sol+=poz-i;
        q[v[i]]--;
        if(q[v[i]]==0) nr--;
    }
    return sol;
}

int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    int l,u;
    fread(pars,1,Buffer,stdin);
    n=read();l=read();u=read();
    for(int i=1;i<=n;i++) v[i]=read();
    printf("%lld",solve(u)-solve(l-1));
    return 0;
}