记录编号 23240 评测结果 AAAAAAAAAA
题目名称 [HNOI 2004] 宠物收养所 最终得分 100
用户昵称 Gravatardonny 是否通过 通过
代码语言 Pascal 运行时间 0.417 s
提交时间 2011-03-04 14:00:32 内存使用 1.94 MiB
显示代码纯文本
program pet;
var
  t,head:longint;
  a,p,left,right,typ,ran:array[1..80000]of longint;
  n,i,s,r,max,m:longint;

procedure turnleft(const x:longint);
var
  o,q,s:longint;
begin
  o:=p[x];
  q:=left[right[x]];
  s:=right[x];
  if left[o]=x then left[o]:=s
  else right[o]:=s;
  p[s]:=o;
  if head=x then head:=s;
  left[s]:=x;
  p[x]:=s;
  right[x]:=q;
  p[q]:=x;
end;

procedure turnright(const x:longint);
var
  o,q,s:longint;
begin
  o:=p[x];
  q:=left[x];
  s:=right[q];
  if left[o]=x then left[o]:=q
  else right[o]:=q;
  if head=x then head:=q;
  p[q]:=o;
  right[q]:=x;
  p[x]:=q;
  p[s]:=x;
  left[x]:=s;
end;  

function pre(const x:longint):longint;
var
  o,q:longint;
begin
  if left[x]<>0 then
  begin
    o:=left[x];
    q:=right[o];
    while q<>0 do
    begin
      o:=q;
      q:=right[o];
    end;
    exit(o);
  end
  else
  begin
    o:=p[x];
    q:=x;
    while (o<>0)and(left[o]=q) do
    begin
      q:=o;
      o:=p[q];
    end;
    exit(o);
  end;
end;

function suc(const x:longint):longint;
var
  o,q:longint;
begin
  if right[x]<>0 then
  begin
    o:=right[x];
    q:=left[o];
    while q<>0 do
    begin
      o:=q;
      q:=left[o];
    end;
    exit(o);
  end
  else
  begin
    o:=p[x];
    q:=x;
    while (o<>0)and(right[o]=q) do
    begin
      q:=o;
      o:=p[q];
    end;
    exit(o);
  end;
end;

procedure balanceup(const x:longint);
begin
  while (ran[x]<ran[p[x]])and(p[x]<>0) do
  begin
    if left[p[x]]=x then turnright(p[x])
    else turnleft(p[x]);
  end;
end;

procedure insert(const x,y:longint);
var
  o,q:longint;
begin
  inc(m);
  a[m]:=y;
  typ[m]:=x;
  ran[m]:=random(1000000);
  o:=head;
  if a[m]>a[o] then q:=right[o]
  else q:=left[o];
  while q<>0 do
  begin
    o:=q;
    if a[m]>a[o] then q:=right[o]
    else q:=left[o];
  end;
  p[m]:=o;
  if a[m]>a[o] then right[o]:=m
  else left[o]:=m;
  balanceup(m);
end;

procedure delete(const x:longint);
var
  o,q:longint;
begin
  if (left[x]=0)or(right[x]=0) then
  begin
    if (left[x]=0)and(right[x]=0) then
    begin
      if head=x then
      begin
        t:=2;
        head:=0;
      end
      else
      begin
        o:=p[x];
        if left[o]=x then left[o]:=0
        else right[o]:=0;
      end;
    end
    else
    begin
      if left[x]<>0 then q:=left[x]
      else q:=right[x];
      if x=left[p[x]] then left[p[x]]:=q
      else right[p[x]]:=q;
      p[q]:=p[x];
      if head=x then head:=q;
    end;
  end
  else
  begin
    o:=ran[x] mod 2;
    if o=1 then q:=pre(x)
    else q:=suc(x);
    a[x]:=a[q];
    delete(q);
  end;
end;

procedure search(const x,y:longint);
var
  o,q,s,t:longint;
begin
  o:=head;
  if y>a[o] then q:=right[o]
  else q:=left[o];
  while q<>0 do
  begin
    o:=q;
    if y>a[o] then q:=right[o]
    else q:=left[o];
  end;
  
  if (left[o]=0)and(right[o]=0)and(head=o) then
  begin
    max:=(max+abs(a[o]-y))mod 1000000;
    delete(o);
    exit;
  end;
  
  if y>a[o] then 
  begin
    s:=suc(o);
    if s=0 then 
    begin
      s:=pre(o);
      t:=o;
      o:=s;
      s:=t;
    end; 
  end  
  else
  begin
    s:=pre(o);
    if s=0 then s:=suc(o)
    else
    begin
      t:=o;
      o:=s;
      s:=t;
    end;
  end;
  t:=abs(y-a[o]);
  if abs(a[s]-y)<t then
  begin
    max:=(max+abs(a[s]-y)) mod 1000000;
    delete(s);
  end
  else
  begin
    max:=(max+t) mod 1000000;
    delete(o);
  end;
  
end;  
  
procedure main(const x,y:longint);
begin
  if t=2 then
  begin
    t:=x;
    inc(m);
    a[m]:=y;
    p[m]:=0;
    typ[m]:=x;
    ran[m]:=random(1000000);
    head:=m;
  end
  else
  begin
    if t=x then
      insert(x,y)
    else
    begin
      search(x,y);
    end;
  end;
end;

begin
  assign(input,'pet.in');
  reset(input);
  assign(output,'pet.out');
  rewrite(output);
  
  readln(n);
  
  t:=2;
  head:=0;
  randomize;
  m:=0;
  max:=0;
  
  for i:=1 to n do
  begin
    readln(s,r);
    main(s,r);
  end;
  
  writeln(max);
  close(input);
  close(output);
end.