fengyunfly吧 关注:9贴子:102
  • 0回复贴,共1
//RP test
var
  key,lc,rc,sum,aux:array[0..500000] of longint;
  count,x,len,tmp:longint;
  root,total,a,n,ta,tb:longint;
procedure rotl(var k:longint);
var
  t:longint;
begin
  t:=rc[k];
  rc[k]:=lc[t];
  lc[t]:=k;
  sum[k]:=sum[lc[k]]+sum[rc[k]]+1;
  sum[t]:=sum[lc[t]]+sum[rc[t]]+1;
  k:=t;
end;
procedure rotr(var k:longint);
var
  t:longint;
begin
  t:=lc[k];
  lc[k]:=rc[t];
  rc[t]:=k;
  sum[k]:=sum[lc[k]]+sum[rc[k]]+1;
  sum[t]:=sum[lc[t]]+sum[rc[t]]+1;
  k:=t;
end;
procedure insert(var k:longint);
begin
  if k=0 then
    begin
      inc(len);
      k:=len;
      key[k]:=x;
      lc[k]:=0; rc[k]:=0; sum[k]:=1;
      aux[k]:=random(1000000);
      exit;
    end;
  if x<key[k] then
    begin
      inc(sum[k]);
      insert(lc[k]);
      if aux[lc[k]]<aux[k] then rotr(k);
    end
   else
    begin
      inc(sum[k]);
      insert(rc[k]);
      if aux[rc[k]]<aux[k] then rotl(k);
    end;
end;
procedure remove(var k:longint);
begin
  if k=0 then
    begin
      exit;
    end;
  if x=key[k] then
    begin
      if (lc[k]=0) or (rc[k]=0) then
        begin
           if lc[k]=0 then k:=rc[k]
             else k:=lc[k]
         end
          else
           begin
            rotl(k);
            dec(sum[k]);
            remove(lc[k]);
           end;
   end
  else
   begin
     dec(sum[k]);
     if x<key[k] then remove(lc[k])
      else remove(rc[k]);
   end;
end;
procedure find(k:longint);
begin
  if count+sum[k]-sum[rc[k]]=x then tmp:=key[k]
  else
   begin
     if count+sum[k]-sum[rc[k]]<x then
       begin
         inc(count,sum[k]-sum[rc[k]]);
         find(rc[k]);
       end
      else find(lc[k]);
   end;
end;
begin
  fillchar(key,sizeof(key),0);
  fillchar(sum,sizeof(sum),0);
  fillchar(lc,sizeof(lc),0);
  fillchar(rc,sizeof(rc),0);
  randomize;
  root:=0; total:=1; len:=0;
  x:=maxlongint;
  insert(root);
  readln(n);
  for a:=1 to n do
    begin
      readln(ta,tb);
      if ta>total then ta:=total;
      x:=total+1-ta;
      count:=0;
      find(root);
      if tmp<=tb then
        begin
          writeln('archer');
          dec(total);
          x:=tmp;
          remove(root);
        end
       else
        begin
          writeln('facer');
          inc(total);
          x:=tb;
          insert(root);
        end;
    end;
end.//tank


IP属地:上海1楼2008-06-23 23:36回复