Pagini recente » Cod sursa (job #151772) | Cod sursa (job #3239093) | Cod sursa (job #3280003) | Cod sursa (job #3194787) | Cod sursa (job #993648)
Cod sursa(job #993648)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMax = 1048586;
int N, L, U,st,dr1,dr2,c1,c2;
long long a[NMax], aux[NMax],sol;
int fr1[NMax],fr2[NMax];
inline void Read()
{
freopen ("secv5.in","r",stdin);
scanf("%d %d %d",&N,&L,&U);
int i;
for(i=1; i<=N; i++)
scanf("%lld",&a[i]);
}
inline 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;
cout << a[i] << " ";
}
}
inline void Solve()
{
st=dr1=dr2=c1=c2=1;
fr1[a[1]]=fr2[a[1]]=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++;
}
}
}
freopen("secv5.out","w",stdout);
printf("%lld\n",sol);
}
int main()
{
Read();
Normalizare();
Solve();
return 0;
}