Pagini recente » Cod sursa (job #1418183) | Cod sursa (job #1419646) | Cod sursa (job #14507) | Cod sursa (job #2949240) | Cod sursa (job #1786920)
#include <iostream>
#include<vector>
#include<cstdio>
#define MOD 666013
using namespace std;
int n,a,b,i,x,v[1200010],nr,vf[1200000],L[1200010];
vector<pair<int,int> >h[MOD];
inline int exista(int x)
{
int m=x%MOD;
for(int i=0;i<h[m].size();i++)
if(h[m][i].first==x)
return h[m][i].second;
return 0;
}
inline int normalizare(int x)
{
int p=exista(x);
if(p)
return p;
else
{
nr++;
h[x%MOD].push_back(make_pair(x,nr));
return nr;
}
}
inline int procedura(int a)
{
for(i=1;i<=n;i++)
vf[v[i]]=0;
int p=1,nr=0,sum=0;
for(i=1;i<=n;i++)
{
vf[v[i]]++;
if(vf[v[i]]==1)
{
nr++;
while(nr>a)
{
vf[v[p]]--;
if(!vf[v[p]])
nr--;
p++;
}
}
L[i]=p;
sum=sum+(i-L[i]-1);
}
return sum;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
cin>>n>>a>>b;
for(i=1;i<=n;i++)
{
cin>>x;
v[i]=normalizare(x);
}
cout<<procedura(b)-procedura(a-1);
}