Cod sursa(job #869383)

Utilizator rotarraresRotar Rares rotarrares Data 1 februarie 2013 15:50:05
Problema Hashuri Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 2.44 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,k,p:pnod;ver:boolean;
begin
   ver:=false;
   If (a[i]=nil) then
   begin
       If c=1 then
         Begin
         new(a[i]);
         a[i]^.info:=x;
         a[i]^.dr:=nil;
         ver:=true;
         end;
   end
   else
   begin
       if a[i]^.dr<>nil then
       Begin
       r:=a[i];
       If r^.info=x then
           Begin
             ver:=true;
             If c=2 then
                Begin
                r:=r^.dr;
                a[i]:=a[i]^.dr;
                end;
           end
       else
       repeat
             if r^.dr^.info=x then
                begin
                 ver:=true;
                  if c=2 then
                  Begin
                   If r^.dr^.dr<>nil then
                     Begin
                     k:=r;
                     r:=r^.dr;
                     r:=r^.dr;
                     k^.dr:=r;
                     end
                   else
                     begin
                     k:=r^.dr;
                     r^.dr:=nil;
                     end;
                  end;
                end;
            If r^.dr<>nil then
            r:=r^.dr;
       until (r^.dr=nil);
       end;
       If a[i]^.dr=nil then
       begin
       If c=2 then
          If x=a[i]^.info then
            new(a[i]);
       If x=a[i]^.info then
            ver:=true;
       end;
   end;
  verificare:=ver;
end;

begin
assign(f,'hashuri.in');reset(f);
assign(g,'hashuri.out');rewrite(g);
readln(f,n);
for j:=1 to n do
      begin
             readln(f,c,d);
             i:=(d mod 1000000)+1;
             t:=verificare(d);
             If (c=1) and (t=false) then
                   begin
                   adaugare(d); end;
             if c=3 then
             begin
                 if t=true then
                     begin
                         writeln(g,'1');
                     end
             else
                     begin
                         writeln(g,'0');
                     end
             end;
      end;
close(f);
close(g);
end.