Pagini recente » Cod sursa (job #1269347) | Cod sursa (job #1565373) | Cod sursa (job #2470628) | Cod sursa (job #1323261) | Cod sursa (job #906004)
Cod sursa(job #906004)
#include<cstdio>
#include<vector>
#define M 666013
#define NMax (1<<20)+5
using namespace std;
int v[NMax],n;
vector<pair<int,int> > a[M];
vector<pair<int,int> >::iterator find (int x)
{
vector<pair<int,int> >::iterator it;
for (it=a[x%M].begin(); it!=a[x%M].end(); ++it)
if (it->first==x)
return it;
return a[x%M].end();
}
void hash ()
{
int i;
for (i=1; i<=n; i++)
if (find(v[i])==a[v[i]%M].end())
a[v[i]%M].push_back(make_pair(v[i],0));
}
void reset ()
{
int i;
vector<pair<int,int> >::iterator it;
for (i=1; i<=n; i++)
{
it=find(v[i]);
it->second=0;
}
}
int sol (int x)
{
int nr=1,st=1,sum=1,i;
vector<pair<int,int> >::iterator it;
it=find(v[1]);
(it->second)=1;
for (i=2; i<=n; i++)
{
it=find(v[i]);
if ((it->second)==0)
nr++;
(it->second)++;
while (nr>x)
{
it=find(v[st]);
if ((it->second)==1)
nr--;
(it->second)--;
st++;
}
sum+=i-st+1;
}
return sum;
}
int main ()
{
int l,u,r1,r2,i;
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d",&n,&l,&u);
for (i=1; i<=n; i++)
scanf("%d",&v[i]);
hash();
r1=sol(u);
reset();
r2=sol(l-1);
printf("%d\n",r1-r2);
return 0;
}