记录编号 32944 评测结果 AAAAAAAAAA
题目名称 数对的个数 最终得分 100
用户昵称 Gravatarlizhe 是否通过 通过
代码语言 Pascal 运行时间 0.131 s
提交时间 2011-11-08 20:25:32 内存使用 2.41 MiB
显示代码纯文本
program dec;
var
  i,j,n,c,l,r,mid,num,x:longint;
  ans:int64;
  a,t,p:array[1..200000]of longint;
procedure swap(var a0,b0:longint);
var
  c0:longint;
begin
  c0:=a0;
  a0:=b0;
  b0:=c0
end;

procedure sort(l,r: longint);
var
  i,j,x,y: longint;
begin
  i:=l;
  j:=r;
  x:=p[(l+r) div 2];
  repeat
    while p[i]<x do inc(i);
    while x<p[j] do j:=j-1;
    if not(i>j) then
    begin
      swap(p[i],p[j]);
      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 init;
begin
  assign(input,'dec.in');
  reset(input);
  assign(output,'dec.out');
  rewrite(output);
  read(n,c);
  for i:=1 to n do
    read(p[i]);
  sort(1,n);
  a[1]:=p[1];
  x:=a[1];
  t[1]:=1;
  num:=1;
  for i:=2 to n do
    if p[i]=x then
      inc(t[num])
    else
    begin
      inc(num);
      a[num]:=p[i];
      inc(t[num]);
      x:=p[i]
    end
end;

procedure erfen;
begin
  l:=1; r:=num;
  while l<r do
  begin
    mid:=(l+r) div 2;
    if a[mid]>=x then r:=mid
    else l:=mid+1
  end;
  if a[l]=x then
    ans:=ans+t[i]*t[l];
end;

procedure main;
begin
  for i:=1 to num do
  begin
    x:=a[i]+c;
    erfen
  end
end;

procedure print;
begin
  writeln(ans);
  close(input);
  close(output)
end;

begin
  init;
  main;
  print
end.