Pagini recente » Cod sursa (job #2561798) | Cod sursa (job #2210950) | Cod sursa (job #452347) | Cod sursa (job #2928893) | Cod sursa (job #210748)
Cod sursa(job #210748)
#include<stdio.h>
#include<stdlib.h>
#define NMAX 1051000
unsigned long q[NMAX],in,sf,i,j,n,m,k,l,a,s,b,c,y[NMAX];
unsigned long z[NMAX];
struct kkt
{
unsigned 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;
}
unsigned long kkt(unsigned long m)
{
unsigned 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("%lu%lu%lu",&n,&b,&c);
for (i=1;i<=n;i++)
{
scanf("%lu",&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("%lu\n",s);
return 0;
}