Pagini recente » Cod sursa (job #210900) | Cod sursa (job #2192633) | Cod sursa (job #100149) | Cod sursa (job #1585509) | Cod sursa (job #1290266)
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define mod 666013
#define max 1<<20
vector<int>b;
vector < pair <unsigned int, int> > Hash[666014];
int N,L,U;
unsigned int 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);
//int rez=search(x);
int cheie=x%mod,rez=-1;
int ok=1;
for (int i=0;i<Hash[cheie].size() && ok;++i)
if (Hash[cheie][i].first==x){
rez=Hash[cheie][i].second;
ok=0;
}
if (rez==-1){
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;*/
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));
}