Pagini recente » Cod sursa (job #660460) | Cod sursa (job #2217436) | Cod sursa (job #2907258) | Cod sursa (job #2298895) | Cod sursa (job #210747)
Cod sursa(job #210747)
#include<stdio.h>
#include<stdlib.h>
#define NMAX 1051000
long q[NMAX],in,sf,i,j,n,m,k,l,a,s,b,c,y[NMAX];
long z[NMAX];
struct kkt
{
long X,Y;
};
kkt x[NMAX];
int sort(const void *a, const void *b)
{
kkt x=*(kkt *)a , y=*(kkt *)b;
if (x.X<y.X)
return -1;
if (x.X>y.X)
return 1;
return 0;
}
long kkt(long m)
{
long s=0;
in=1;
sf=1;
z[y[1]]=1;
k=1;
while (in<=sf||sf<n)
{
while (k<=m&&sf<=n)
{
sf++;
if (!z[y[sf]])
k++;
z[y[sf]]++;
}
z[y[sf]]--;
sf--;
k--;
s+=sf-in+1;
z[y[in]]--;
if (z[y[in]]==0)
k--;
in++;
}
return s;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%ld%ld%ld",&n,&b,&c);
for (i=1;i<=n;i++)
{
scanf("%ld",&x[i].X);
x[i].Y=i;
}
qsort(x+1,n,sizeof(x[0]),sort);
k=1;
for (i=1;i<=n;i++)
{
y[x[i].Y]=k;
if (x[i].X!=x[i+1].X)
k++;
}
s=kkt(c);
s-=kkt(b-1);
printf("%ld\n",s);
return 0;
}