Pagini recente » Cod sursa (job #2690898) | Cod sursa (job #2323497) | Cod sursa (job #2713081) | Cod sursa (job #348221) | Cod sursa (job #336888)
Cod sursa(job #336888)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const unsigned int m = 699967;
const unsigned int N = (1<<20);
vector<pair<unsigned int,unsigned int> > x;
unsigned int n,v[N],poz[N];
unsigned int apa[N],apb[N];
int a,b;
void citire()
{
char s[11],*p;
scanf("%u%u%u\n",&n,&a,&b);
for(unsigned int i=0;i<n;++i)
{
scanf("%s\n",s);
for(p=s,v[i]=0;*p;++p)
v[i]=v[i]*10+*p-'0';
x.push_back(make_pair(v[i],i));
}
}
void calcul()
{
long long rez=0;
unsigned int i;
sort(x.begin(),x.end());
poz[0]=0;
for(i=1;i<n;++i)
if(x[i].first==x[i-1].first)
poz[i]=poz[i-1];
else
poz[i]=1+poz[i-1];
for(i=0;i<n;++i)
v[x[i].second]=poz[i];
int nra=0,nrb=0,pa=-1,pb=-1;
for(i=0;i<n;++i)
{
if(!apa[v[i]])
++nra;
if(!apb[v[i]])
++nrb;
++apa[v[i]];
++apb[v[i]];
while(nra==a)
{
++pa;
--apa[v[pa]];
if(!apa[v[pa]])
--nra;
}
while(nrb==b+1)
{
++pb;
--apb[v[pb]];
if(!apb[v[pb]])
--nrb;
}
rez+=pa-pb;
}
printf("%lld\n",rez);
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
citire();
calcul();
return 0;
}