Cod sursa(job #9642)

Utilizator valkyriaValkyria Dark valkyria Data 27 ianuarie 2007 16:30:50
Problema Secventa 5 Scor 0
Compilator fpc Status done
Runda Unirea 2007, clasele 11-12 Marime 1.49 kb
Program secventa_5;
type adresa=^nod; nod=record inf:longint; adr:adresa; end;
var v:adresa;
	f,g:text;
	n,u,l,nr,dst,i,x:longint;

Function ad_nod_tst_dist(va:longint):boolean;
var a,b:adresa; OK:boolean;
begin
	ok:=true;
	if v=nil then
		begin
		new(a);
		a^.adr:=nil;
		a^.inf:=va;
		v:=a;
		end
	else
		begin
		a:=v;
		while a^.adr<>nil do 
		begin
			if a^.inf=va then ok:=false;
			a:=a^.adr;
		end;
		if a^.inf=va then ok:=false;
		new(b);
		a^.adr:=b;
		b^.adr:=nil;
		b^.inf:=va;
	end;
	ad_nod_tst_dist:=ok;
end;

Function distinct(va:longint):boolean;
var a:adresa; ok:boolean;
begin
	ok:=true;
	a:=v;
		while a<>nil do 
		begin
			if a^.inf=va then ok:=false;
			a:=a^.adr;
		end;
	distinct:=ok;
end;

Function ad_to_nr:longint;
var a:adresa; dstmp,ad:longint;
begin
	ad:=0;
	dstmp:=dst;
	a:=v;
	while a<>nil do
	begin
		if distinct(a^.inf) then
		dstmp:=dstmp-1;
		if dstmp<l then break;
		if (dstmp>=l) and (dstmp<=u) then begin
		ad:=ad+1;
		end;
		a:=a^.adr;
	end;
	ad_to_nr:=ad;
end;

Procedure sterge_primul;
var a:adresa; z:longint;
begin
	a:=v;
	v:=a^.adr;
	z:=a^.inf;
	dispose(a);
	if distinct(z) then
		dst:=dst-1;
	{nr:=nr+ad_to_nr;}
	
end;


begin
	assign(f,'secv5.in'); reset(f);
	assign(g,'secv5.out'); rewrite(g);
	dst:=0; nr:=0;v:=nil;
	readln(f, n, l,u);	
	for i:=1 to n do
	begin
		readln(f,x);
		if ad_nod_tst_dist(x) then
			dst:=dst+1;
		if (dst>=l) and (dst<=u) then
			begin nr:=nr+1; end;
		nr:=nr+ad_to_nr;
		if (dst>u) then sterge_primul
	end;	
	writeln(g,nr);
	close(f);
	close(g);
end.