Cod sursa(job #2145114)

Utilizator alexilasiAlex Ilasi alexilasi Data 27 februarie 2018 09:25:41
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;

ifstream fin("secv5.in");
ofstream fout("secv5.out");

int n,l,u,i,nr,j;
long long ans;
int v[1100000],prez[1100000];
pair <long long,int> a[1100000];

int main()
{
    fin>>n>>l>>u;
    for(i=1;i<=n;i++)
    {
        fin>>a[i].f;
        a[i].s=i;
    }
    sort(a+1,a+n+1);
    for(i=1;i<=n;i++)
    {
        if(a[i].f!=a[i-1].f)
            nr++;
        v[a[i].s]=nr;
    }
    nr=0;j=1;
    for(i=1;i<=n;i++)
    {
        if(!prez[v[i]])nr++;
        prez[v[i]]++;
        while(nr>u)
            if(!--prez[v[j++]])nr--;
        ans+=(i-j+1);
    }
    nr=0;j=1;
    memset(prez,0,sizeof(prez));
    for(i=1;i<=n;i++)
    {
        if(!prez[v[i]])nr++;
        prez[v[i]]++;
        while(nr>=l)
            if(!--prez[v[j++]])nr--;
        ans-=(i-j+1);
    }
    fout<<ans;
    return 0;
}