Pagini recente » Cod sursa (job #1379934) | Cod sursa (job #1669882) | Cod sursa (job #660279) | Cod sursa (job #2945770) | Cod sursa (job #210765)
Cod sursa(job #210765)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define NMAX 1097152
using namespace std;
unsigned long in,sf,i,j,n,m,k,l,a,b,c,y[NMAX];
unsigned long z[NMAX];
char cc,ss[16];
long long s;
struct kkt
{
unsigned long X,Y;
};
kkt x[NMAX];
char ssort(const kkt a,const kkt b)
{
return (a.X<b.X);
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%lu%lu%lu",&n,&b,&c);
scanf("%c",&cc);
for (i=1;i<=n;++i)
{
gets(ss);
m=strlen(ss)-1;
for (j=0;j<=m;++j)
x[i].X=x[i].X*10+ss[j]-48;
x[i].Y=i;
}
sort(x,x+n,ssort);
k=1;
for (i=1;i<=n;++i)
{
y[x[i].Y]=k;
if (x[i].X!=x[i+1].X)
k++;
}
m=c;
s=0;
in=1;
sf=1;
k=1;
z[y[1]]=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++;
}
m=b-1;
in=1;
sf=1;
k=1;
z[y[1]]=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++;
}
printf("%lld\n",s);
return 0;
}