Cod sursa(job #408790)

Utilizator hungntnktpHungntnktp hungntnktp Data 3 martie 2010 11:09:27
Problema Hashuri Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.57 kb
const fi = 'hashuri.in';
     fo = 'hashuri.out';
           //hashuri.ans
     maxn = 1000003;
     p    = 1000003;
var a : array[0..maxn] of longint;
    f,next : array[0..maxn] of longint;
    n : longint;
    f1,f2 : text;

procedure make;
var i,j : longint;
 begin
  randomize;
  assign(f1,fi);
  rewrite(f1);
  Writeln(f1,30);
  for i := 1 to 30 do
   begin
    Writeln(f1,random(3)+1,' ',random(103));
   end;
  close(f1);
 end;

function check(v:longint):longint;
var ok,i,j : longint;
 begin
  ok := 0;
  i := v mod p;
  i := f[i];
  while i <> 0 do
   begin
    if a[i] = v then
     begin
      ok := 1; break;
     end;
    i := next[i];
   end;
  exit(ok);
 end;

procedure delete(v:longint);
var i,j,k,prev : longint;
 begin
  i := v mod p; j := f[i]; prev := 0;

  while (j <> 0) and (a[j] = v) do j := next[j];
  f[i] := j;

  while j <> 0 do
   begin
    if a[j] = v then
     begin
      next[prev] := next[j];
      j := next[j];
     end
    else
     begin
      prev := j;
      j := next[j];
     end;
   end;
 end;

procedure push(w,v:longint);
var i,j : longint;
 begin
  i := v mod p;
  j := f[i];
  next[w] := j;
  f[i] := w;
 end;

procedure init;
var u,v,i : longint;
 begin
  read(f1,n);
  for i := 1 to n do
   begin
    read(f1,u,v);
    a[i] := v;

    if u = 1 then push(i,v) else
    if u = 2 then delete(v) else
    if u = 3 then Writeln(f2,check(v));
   end;
 end;

begin
// make;
 assign(f1,fi);
 reset(f1);
 assign(f2,fo);
 rewrite(f2);
 init;
 close(f1); close(f2);
end.