Pagini recente » Cod sursa (job #2722037) | Cod sursa (job #1487187) | Cod sursa (job #919089) | Cod sursa (job #1551562) | Cod sursa (job #247854)
Cod sursa(job #247854)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxh 666013
#define nmax 1<<21
using namespace std;
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;
return ;
}
}
add(y,x);
return ;
}
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(){
FILE *f=fopen("secv5.in","r");
fscanf(f,"%lu %lu %lu",&n,&L,&U);
for(i=1;i<=n;i++){
fscanf(f,"%lu",&x);
cauta(x%maxh,x);
}
fclose(f);
A=(long long)lung(U);
B=(long long)lung(L-1);
sol=A - B;
FILE *g=fopen("secv5.out","w");
fprintf(g,"%lld",sol);
fclose(g);
return 0;
}