Cod sursa(job #869007)

Utilizator rotarraresRotar Rares rotarrares Data 31 ianuarie 2013 20:52:44
Problema Hashuri Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.83 kb
type      pnod=^nod;
          nod=record
              info:longint;
              dr:pnod;
              end;
var a:array[1..1000001] of PNOD;
                      c:byte;n,j:integer;d,i:longint; t:boolean;
      f,g:text;
procedure adaugare(e:longint);
var d:pnod;
begin
new(d);
d^.dr:=a[i];
d^.info:=e;
a[i]:=d;
end;

function verificare(x:longint):boolean;
var r:pnod;ver:boolean;
begin
   ver:=false;
   if a[i]^.dr<>nil then
       Begin
       r:=a[i];
       if r^.info=x then
{daca primul element este x , stergerea sa se face din a[i]}
                begin
                ver:=true;
                if c=2 then
                a[i]:=a[i]^.dr;
                if c=1 then
                adaugare(x);
                end;
       while r^.dr^.dr<>nil do
{verifica dinainte daca urmatorul nod contine x pentru
a sarii peste el(sterge) in cazul c=2}
            begin
            if r^.dr^.info=x then
                begin
                ver:=true;
                if c=2 then
                r^.dr:=r^.dr^.dr;
                if c=1 then
                adaugare(x);
                end;
            if r^.dr<>nil then
            r:=r^.dr;
            end
       end
   else
       begin
       if c=1 then
          adaugare(x);
       end;
  verificare:=ver;
end;

begin
assign(f,'hashuri.in');reset(f);
assign(g,'hashuri.out');rewrite(g);
readln(f,n);
For i:=1 to 1000001 do
  begin
   new(a[i]);
   a[i]^.dr:=nil;
  end;
for j:=1 to n do
      begin
             readln(f,c,d);
             i:=(d mod 1000000)+1;
             t:=verificare(d);
             if c=3 then
             begin
                 if t=true then
                         writeln(g,'1')
             else
                         writeln(g,'0');
             end;
      end;
close(f);
close(g);
end.