记录编号 1028 评测结果 AAAAAAAAAA
题目名称 [NOIP 2007]统计数字 最终得分 100
用户昵称 Gravatarzhai 是否通过 通过
代码语言 Pascal 运行时间 2.976 s
提交时间 2008-07-23 18:55:36 内存使用 0.19 MiB
显示代码纯文本
program pcount;
  var
    a:array[1..2,1..10000]of longint;
    n,i,x,g:longint;
    m,h,t,h1,t1,l,k,j:integer;
    f1,f2:text;
    f:boolean;
  begin
    assign(f1,'pcount.in');reset(f1);
    assign(f2,'pcount.out');rewrite(f2);
    fillchar(a,sizeof(a),0);
    readln(f1,n);
    read(f1,a[1,1]);inc(a[2,1]);
    h:=1;t:=1;
    for i:=2 to n do begin
      read(f1,x);
      h1:=1;
      t1:=t;
      f:=true;

      while (h1<=t1)and f do begin
        if x=a[1,h1]then begin
          inc(a[2,h1]);f:=false;
        end else
         if x=a[1,t1]then begin
          inc(a[2,t1]);f:=false;
         end else begin
           k:=(h1+t1)div 2;
           if a[1,k]=x then begin inc(a[2,k]);f:=false;end
            else if x>a[1,k] then h1:=k+1
                  else t1:=k;
         end;
         if (h1=t1)and(x<a[1,h1])then dec(t1);
      end;
      if f then begin
        inc(t);
        for l:=t downto h1 do if l>1 then
          begin
          a[1,l]:=a[1,l-1];
          a[2,l]:=a[2,l-1];
        end;
        a[1,h1]:=x;
        a[2,h1]:=1;
      end;
    end;
    for i:=1 to t do begin
      write(f2,a[1,i],' ');
      writeln(f2,a[2,i]);
    end;
    close(f1);
    close(f2);
  end.