#include <stdio.h> #include <stdlib.h> #define N 200000 int a[N]; int cmp( const void *a , const void *b ) { return *(int *)a - *(int *)b; /* 升序 */ } int find(int start, int end, int x) { int left, mid, right; left = start; right = end; while(left <= right) { mid = (left + right) / 2; if(a[mid] == x) { int count = 1, i; i = mid - 1; while(i >= start && a[i] == x) count++, i--; i = mid + 1; while(i <= end && a[i] == x) count++, i++; return count; } else if(a[mid] < x) left = mid + 1; else // if(a[mid] > x right = mid - 1; } return 0; } int main(void) { int n, c, i; scanf("%d%d", &n, &c); for(i=0; i<n; i++) scanf("%d", &a[i]); qsort(a, n, sizeof(int), cmp); int count = 0; for(i=0; i<n-1; i++) count += find(i + 1, n - 1, a[i] + c); printf("%d\n", count); return 0; } /************************************************************** Problem: 1767 User: admin Language: C Result: Accepted Time:6 ms Memory:1924 kb ****************************************************************/