Pagini recente » Cod sursa (job #1294128) | Cod sursa (job #155967) | Cod sursa (job #2250812) | Cod sursa (job #1790915) | Cod sursa (job #993652)
Cod sursa(job #993652)
#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;
struct str
{
int val, poz;
bool operator <(const str &A) const
{
return val<A.val;
}
};
str v[Nmax];
inline void Normalizare()
{
sort(v+1,v+n+1);
for(int i = 1;i <= n; ++i)
a[v[i].poz] = a[v[i-1].poz]+!(v[i].val==v[i-1].val);
}
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]);
v[i].val = a[i];
v[i].poz = 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;
}