记录编号 32916 评测结果 AAAAAAAAAA
题目名称 数对的个数 最终得分 100
用户昵称 Gravatarreamb 是否通过 通过
代码语言 Pascal 运行时间 0.168 s
提交时间 2011-11-08 19:53:25 内存使用 1.64 MiB
显示代码纯文本
program shuduidegeishu;
var
  l,n,c,ans,d,weizhi,i,j,jilu,t:longint;
  a,b:array[1..200000]of longint;
procedure sort(l,r: longint);
      var
         i,j,x,y: longint;
      begin
         i:=l;
         j:=r;
         x:=a[(l+r) div 2];
         repeat
           while a[i]<x do
            inc(i);
           while x<a[j] do
            dec(j);
           if not(i>j) then
             begin
                y:=a[i];
                a[i]:=a[j];
                a[j]:=y;
                inc(i);
                j:=j-1;
             end;
         until i>j;
         if l<j then
           sort(l,j);
         if i<r then
           sort(i,r);
      end;
procedure find(x,y:longint);
var
  mid:longint;
begin
  mid:=(x+y)div 2;
  if x=y then
  begin
    if a[x]=d then
    begin
      weizhi:=x;
      exit
    end
    else
    begin
      weizhi:=maxlongint;
      exit
    end
  end;
  if a[mid]<d then
    find(mid+1,y)
  else
    find(x,mid)
end;
begin
  assign (input,'dec.in');
  reset (input);
  assign (output,'dec.out');
  rewrite (output);
    readln(n,c);
    for i:=1 to n do
      read (a[i]);
    a[n+1]:=maxlongint;
    sort(1,n);
    jilu:=1;
    b[1]:=1;
    for i:=1 to n do
      if a[i]<>a[i-1] then
      begin
        b[jilu]:=i-1;
        jilu:=i
      end;
    b[jilu]:=n;
    for i:=1 to n-1 do
    begin
      d:=a[i]+c;
      find(i+1,n);
      if weizhi<>maxlongint then
        ans:=ans+b[weizhi]-weizhi+1
    end;
    writeln(ans);
  close (input);
  close (output)
end.