Pagini recente » Cod sursa (job #2092159) | Cod sursa (job #1799265) | Rating Lukacs Raul (Raul2325) | Cod sursa (job #882693) | Cod sursa (job #710914)
Cod sursa(job #710914)
#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("%d", &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);
}
}
}
int 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;
}
int solve_subseq(int x){
for (int i=0;i<b.size();++i)
viz[i]=0;
int rez=0,nr=0,j=0;
for (int i=0;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(){
int x=solve_subseq(U);
int y=solve_subseq(L-1);
printf("%d", x-y);
}