typedeflonglong LL; constint N = 1e6; int q[N];//用来存放那串数 LL num;//要开longlong,会爆int int value,n,c; //快排 voidquick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1; int x = q[l + r >> 1]; while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j); quick_sort(q, j + 1, r); }
intmain(){ cin>>n>>c; for (int i = 0; i < n; i++) cin>>q[i]; quick_sort(q, 0, n - 1); //遍历给出的那串数,一个一个进行查找 for (int i = 0; i < n; i++) { //二分查找,先找满足条件的数的起始位置 int l = 1, r = n - 1; while (l < r) { int mid = l + r >> 1; if (q[mid] - q[i] >= c) r = mid; else l = mid + 1; } //如果q[l]满足条件,用value记录起始位置,再找满足条件的数的终止位置 if (q[l] - q[i] == c) { value = l; int l = 1, r = n - 1; while (l < r) { int mid = l + r + 1 >> 1; if (q[mid] - q[i] <= c) l = mid; else r = mid - 1; } num += l - value + 1;//终止坐标-起始坐标+1得出满足条件的书的个数 } } cout << num; return0; }