Pagini recente » Cod sursa (job #1311845) | Cod sursa (job #239562) | Cod sursa (job #2295142) | Cod sursa (job #257628) | Cod sursa (job #1760620)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define INF 2140000000
#define MaxN 1048577
#define MOD 666013
using namespace std;
int N,L,U,X,pos=0,v[MaxN];
unsigned S[MaxN];
vector <pair<unsigned,int>> h[MOD];
void Add_To_Hash(unsigned nr)
{
for(int i=0;i<h[nr%MOD].size();i++)
if(h[nr%MOD][i].first==nr)
return;
h[nr%MOD].push_back(make_pair(nr,0));
}
int Search(unsigned nr)
{
for(int i=0;i<h[nr%MOD].size();i++)
if(h[nr%MOD][i].first==nr)return h[nr%MOD][i].second;
}
long long seq(int Len)
{
long long ans=0;
int d=0,size=0,aux,j=1;
memset(v,0,sizeof v);
if(Len==0)return 0;
for(int i=1;i<=N;i++)
{
aux=Search(S[i]);
v[aux]++;
if(v[aux]==1)d++;
if(d>Len)
while(d>Len)
if(--v[Search(S[j++])]==0)
d--;
ans+=i-j+1;
}
return ans;
}
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("%d",&S[i]);
Add_To_Hash(S[i]);
}
for(int i=0;i<MOD;i++)
for(int j=0;j<h[i].size();j++)
h[i][j].second=++pos;
printf("%lld",seq(U)-seq(L-1));
return 0;
}