Pagini recente » Cod sursa (job #334852) | Cod sursa (job #866504) | Cod sursa (job #1313616) | Cod sursa (job #1274371) | Cod sursa (job #1313638)
#include<cstdio>
#include<vector>
#define MOD 666013
#define NMAX 1<<20+2
using namespace std;
int n,l,u;
unsigned int v[NMAX];
vector<unsigned int>H[MOD+1];
bool cauta(int x)
{
int i;
int r=x%MOD;
for(i=0;i<H[r].size();++i)
if (H[r][i]==x) return 1;
return 0;
}
void add(int x)
{
int r=x%MOD;
H[r].push_back(x);
}
int sterge(int x)
{
int r=x%MOD;
int ok=0,i;
int k=0;
vector<unsigned int>::iterator it;
it=H[r].begin();
while (it!=H[r].end())
{
if (*it==x && ok==0)
{
ok=1;
H[r].erase(it);
}
else
{
if (*it==x) return 1;
++it;
}
}
return 0;
}
long long sol(unsigned int x)
{
int i,j,nr=0;
long long rez=0;
for (i=1;i<MOD;++i)
H[i].clear();
for (i=1,j=1;i<=n;++i)
{
if (cauta(v[i])==0) ++nr;
add(v[i]);
while(nr>x)
{
int cat=sterge(v[j]);
if (cat==0) --nr;
++j;
}
rez+=(i-j+1);
}
return rez;
}
int main()
{
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
scanf("%d%d%d",&n,&l,&u);
for (int i=1;i<=n;++i)
scanf("%u",&v[i]);
sol(l-1);
printf("%lld\n",sol(u)-sol(l-1));
return 0;
}