Pagini recente » Cod sursa (job #831335) | Cod sursa (job #3176549) | Cod sursa (job #1761113) | Cod sursa (job #2817069) | Cod sursa (job #1291488)
#include<fstream>
#include<cstring>
#include<algorithm>
#define maxh 666013
#define nmax 1<<21
using namespace std;
ifstream f("secv6.in");
ofstream g("secv6.out");
struct nod {unsigned long int inf,x; nod *urm;} *l[maxh + 10];
unsigned long int n,U,L,x,nr,i,v[nmax],viz[nmax],a[nmax];
long long sol,A,B;
void add(unsigned long int y,unsigned long int x){
nod *p=new nod;
nr++;
p->x=nr;
p->inf=x;
p->urm=l[y];
l[y]=p;
v[i]=nr;
}
void cauta(unsigned long int y,unsigned long int x){
nod *p;
for(p=l[y];p!=NULL;p=p->urm)
if(p->inf==x)
v[i]=p->x;
add(y,x);
}
long long lung(unsigned long int X){
if(X == 0)
return 0;
unsigned long int dis=1,p=1;
long long rez=0;
a[1]=1;
viz[v[1]]=1;
for(i=2;i<=n;i++){
if(viz[v[i]]){
viz[v[i]]++;
a[i]=p;
}
else{
viz[v[i]]++;
dis++;
if(dis>X){
while(dis > X){
viz[v[p]]--;
if(viz[v[p]] == 0)
dis--;
p++;
}
}
a[i]=p;
}
}
for(i=1;i<=n;i++)
rez+=(long long)i - (long long)a[i] + (long long)1;
memset(viz,0,sizeof(viz));
return rez;
}
int main(){
f>>n>>L>>U;
for(i=1;i<=n;i++){
f>>x;
cauta(x%maxh,x);
}
A=(long long)lung(U);
B=(long long)lung(L-1);
sol=A - B;
g<<sol;
}