Pagini recente » Cod sursa (job #894979) | Cod sursa (job #1668066) | Cod sursa (job #2683931) | Cod sursa (job #1305569) | Cod sursa (job #710933)
Cod sursa(job #710933)
#include <stdio.h>
#include <vector>
using namespace std;
#define mod 666013
#define max 1<<20
vector < int > a,b;
vector < pair <unsigned int, int> > Hash[666014];
int N,L,U,viz[max];
int search(unsigned int);
void open_files(){
freopen("secv5.in","r",stdin);
freopen("secv5.out","w",stdout);
}
void read(){
scanf("%d %d %d", &N, &L, &U);
int norm=0;
for (int i=0;i<N;++i){
unsigned int x;
scanf("%u", &x);
a.push_back(x);
int rez=search(x);
if (rez==-1){
int cheie=x%mod;
Hash[cheie].push_back(make_pair(x,norm));
b.push_back(norm++);
}
else {
b.push_back(rez);
}
}
}
long long solve_subseq(int);
void write();
int main()
{
open_files();
read();
write();
return 0;
}
int search(unsigned int x){
int cheie=x%mod;
for (int i=0;i<Hash[cheie].size();++i){
if (Hash[cheie][i].first==x)
return Hash[cheie][i].second;
}
return -1;
}
long long solve_subseq(int x){
/*for (int i=0;i<b.size();++i)
viz[i]=0;*/
memset(viz,0,max*sizeof(int));
int nr=0,j=0,i=0;
long long rez=0;
for (;i<N;++i){
if (!viz[b[i]])
nr++;
viz[b[i]]++;
for (; nr > x; j++){
viz[b[j]]--;
if (!viz[b[j]])
nr--;
}
rez+=i-j+1;
}
return rez;
}
void write(){
printf("%lld", solve_subseq(U)-solve_subseq(L-1));
}