Pagini recente » Cod sursa (job #1445915) | Cod sursa (job #2202131) | Cod sursa (job #1688962) | Cod sursa (job #741416) | Cod sursa (job #993626)
Cod sursa(job #993626)
#include <iostream>
#include<cstdio>
#include<algorithm>
#define Nmax (1<<20) + 2
using namespace std;
int fr1[Nmax],fr2[Nmax],c1,c2,n,l,u;
long long a[Nmax],aux[Nmax],sol;
void Normalizare()
{
int i;
for(i=1;i<=n;i++)
{
aux[i]=a[i];
}
sort(aux+1,aux+n+1);
for(i=1;i<=n;i++)
a[i]=lower_bound(aux+1,aux+n+1,a[i])-aux;
}
void Citire()
{
freopen ("secv5.in", "r",stdin);
scanf("%d%d%d",&n,&l,&u);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
}
void Rezolvare()
{
int st, dr1,dr2;
fr1[a[1]]=1;
fr2[a[1]]=1;
st=dr1=dr2=c1=c2=1;
while(dr1<=n)
{
if(c1<l)
{
dr1++;
if(++fr1[a[dr1]]==1)
c1++;
}
if(c2<=u && dr2<n)
{
dr2++;
if(++fr2[a[dr2]]==1)
c2++;
}
else
{
if(c1>=l && c2<=u+1)
{
sol+=dr2-dr1;
if(c2<=u)
sol++;
if(--fr1[a[st]]==0)
c1--;
if(--fr2[a[st]]==0)
c2--;
st++;
}
}
}
}
int main()
{
Citire();
Normalizare();
Rezolvare();
freopen("secv5.out","w",stdout);
printf("%lld\n",sol);
return 0;
}