Pagini recente » Cod sursa (job #71605) | Cod sursa (job #1302734) | Cod sursa (job #2636641) | Cod sursa (job #2219604) | Cod sursa (job #1699479)
#include<cstdio>
#define mod 666013
#include<vector>
using namespace std;
vector<pair<int,int> > v[666013];
vector<pair<int,int> >::iterator it;
int vec[11000000];
int main ()
{freopen ("secv5.in","r",stdin);
freopen ("secv5.out","w",stdout);
int n,i,j,in,sf,x,y,r,k,p,q,sqq,l,s,sw,nr,pp;
scanf("%d%d%d",&n,&x,&y);
l=1;
s=nr=0;
for(i=1;i<=n;i++)
scanf("%d",&vec[i]);
r=vec[1]%mod;
sqq=0;
v[r].push_back(make_pair(vec[1],1));
in=1;
sf=2;
pp=0;
while(in<=sf)
{r=vec[sf]%mod;
sqq=0;
for(j=0;j<v[r].size();j++)
if(v[r][j].first==vec[sf])
{sqq=1;
sw=j;
j=v[r].size();
}
if(sqq==0)
{l++;
if(l-nr==x&&pp==0)
{pp=1;
p=sf;
}
if(l-nr==y+1||(l-nr==y&&sf==n))
{s+=sf-p;
r=vec[in]%mod;
for(it=v[r].begin();it!=v[r].end();it++)
if(it->first==vec[in])
{it->second--;
if(it->second==0)
{v[r].erase(it);
it--;
nr++;
pp=0;
}
}
in++;
}
else
{v[r].push_back(make_pair(vec[sf],1));
sf++;
}
}
else
{v[r][sw].second++;
sf++;
}
if(sf>n)
{sf=n;
in++;
if(l-nr==y)
{s+=sf-p;
r=vec[in]%mod;
for(it=v[r].begin();it!=v[r].end();it++)
if(it->first==vec[in])
{it->second--;
if(it->second==0)
{v[r].erase(it);
it--;
nr++;
pp=0;
}
}
in++;
}
}
}
printf("%d",s);
return 0;
}