记录编号 97671 评测结果 AAAAAAAAAAA
题目名称 数对的个数 最终得分 100
用户昵称 GravatarOI永别 是否通过 通过
代码语言 C++ 运行时间 0.194 s
提交时间 2014-04-19 21:33:23 内存使用 4.89 MiB
显示代码纯文本
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 201000
struct TREAP{
	struct arr{
		int l,r,dat,num;
		int ran;
	}t[N];
	int size,root;
	void clean(){
		memset(t,0,sizeof(t));
		size = root = 0;
	}
	
	void right(int &x){
		int tem = t[x].r;
		t[x].r = t[tem].l;
		t[tem].l = x;
		x = tem;
		return;
	}

	void left(int &x){
		int tem = t[x].l;
		t[x].l = t[tem].r;
		t[tem].r = x;
		x = tem;
		return;
	}
	
	void insert(int &x,int y){
		if (!x){
			x = ++ size;
			t[x].l = t[x].r = 0;
			t[x].dat = y;
			t[x].num = 1;
			t[x].ran = rand();
			return;
		}
		else {
			if (t[x].dat == y){
				t[x].num ++;
				return;
			}
			if (t[x].dat < y){
				insert(t[x].r,y);
				if (t[x].ran > t[t[x].r].ran) right(x);
			}
			else{
				insert(t[x].l,y);
				if (t[x].ran > t[t[x].l].ran) left(x);
			}
		}
		return;
	}
	
	int search(int x,int y){
		if (!x) return 0;
		if (t[x].dat == y) return t[x].num;
		if (t[x].dat > y) return search(t[x].l,y);
		else return search(t[x].r,y);
	}
	
}T;
int a[N];
int n,c;
int main(){
	freopen("dec.in","r",stdin);
	freopen("dec.out","w",stdout);
	T.clean();
	scanf("%d%d",&n,&c);
	for (int i = 1; i <= n; i++){
		scanf("%d",&a[i]);
		T.insert(T.root,a[i]);
	}
	int ans = 0;
	for (int i = 1; i <= n; i++){
		ans += T.search(T.root,a[i] + c);
	}
	printf("%d\n",ans);
	return 0;
}