Pagini recente » Cod sursa (job #1225049) | Cod sursa (job #1001725) | Cod sursa (job #2267485) | Cod sursa (job #1218082) | Cod sursa (job #2795151)
#include <bits/stdc++.h>
using namespace std;
int n,l,u;
const int MOD=666013,NMAX=(1<<21);
unsigned int v[NMAX];
vector <pair<unsigned int,unsigned int>> A[MOD+100];
int adauga(unsigned int val,unsigned int &k){
unsigned int i,limita=A[val%MOD].size(),r=val%MOD;
for(i=0;i<limita;i++)
if(A[r][i].first==val){
A[r][i].second++;
break;
}
if(i==limita){
A[r].push_back(make_pair(val,1));
k++;
}
}
void sterge(unsigned int val,unsigned int &k){
unsigned int i,limita=A[val%MOD].size(),r=val%MOD;
for(i=0;i<limita;i++){
if(A[r][i].first==val){
A[r][i].second--;
if(A[r][i].second==0){
k--;
swap(A[r][i],A[r][limita-1]);
A[r].pop_back();
break;
}
}
}
}
long long int solutie(unsigned int val){
for(int i=0;i<MOD;i++)
A[i].clear();
unsigned int j=1,k=0;
long long int rez=0;
for(int i=1;i<=n;i++){
adauga(v[i],k);
while(k>val){
sterge(v[j],k);
j++;
}
rez=rez+1LL*(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]);
printf("%lld",solutie(u)-solutie(l-1));
return 0;
}