Pagini recente » Cod sursa (job #2359244) | Cod sursa (job #2536249) | Cod sursa (job #1170885) | Cod sursa (job #899117) | Cod sursa (job #212280)
Cod sursa(job #212280)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<utility>
#include<functional>
#include<algorithm>
#define Y first
#define X second
#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[32];
long long s;
vector< pair<unsigned int,unsigned int> > x(NMAX);
long long kkt(unsigned long m)
{
long 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);
scanf("%c",&cc);
x.resize(n+1);
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.begin()+1,x.end());
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("%lld\n",s);
return 0;
}