Pagini recente » Cod sursa (job #813362) | Cod sursa (job #1717520) | Cod sursa (job #743412) | Cod sursa (job #634095) | Cod sursa (job #2795138)
#include <bits/stdc++.h>
#define MOD 666013
#define NMAX (1<<21)
using namespace std;
int n,l,u;
unsigned int v[NMAX];
vector <pair<unsigned int,unsigned int>> A[MOD+100];
int adauga(unsigned int val,int &k){
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++;
return 0;
}
A[r].push_back(make_pair(val,1));
k++;
}
int sterge(unsigned int val,int &k){
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();
return 0;
}
}
}
}
long long int solutie(unsigned int val){
for(int i=0;i<=MOD;i++)
A[i].clear();
int j=1,k=0,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));
}