Pagini recente » Cod sursa (job #2131752) | Cod sursa (job #303482) | Cod sursa (job #160881) | Cod sursa (job #398595) | Cod sursa (job #2795130)
#include <bits/stdc++.h>
#define MOD 666013
#define NMAX (1<<20)
using namespace std;
int n,l,u;
long long int v[NMAX];
vector <pair<long long int,long long int>> A[MOD+1];
inline int adauga(long long 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++;
}
inline int sterge(long long 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(long long 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("%lld",&v[i]);
printf("%lld",solutie(u)-solutie(l-1));
}