评测结果https://www.luogu.com.cn/record/58152283
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 2e5;
int n,c,sum = 0,Sum = 0;
int C[N],au_sp[N];
void search(int l,int r,int k)
{
int mid = (l + r)/2;
if (l == r)
{
if (C[l] == k) sum = au_sp[l];
return ;
}
else
{
if (C[mid]>=k) search(l,mid,k);
if (C[mid]<k) search(mid+1,r,k);
}
}
int main()
{
scanf("%d %d",&n,&c);
scanf("%d",&C[0]);
int sum_sp = 1;
for(int i=1;i<n;i++)scanf("%d",&C[i]);
sort(C,C+n);
for(int i=1;i<n;i++)
{
au_sp[i] = 1;
if (C[i] == C[i-1])sum_sp++;
else {au_sp[i-sum_sp] = sum_sp;sum_sp = 1;}
}
au_sp[n-sum_sp] = sum_sp;
int search_b = N,l;
for(int i = 0;i<n;i++)
{
if (search_b != C[i])
{
search_b = C[i];
l = i + au_sp[i];
if (l > n-1)break;
// printf("%d %d %d ",l,n-1,search_b + c);
search(l,n-1,search_b + c);
// printf("%d\n",sum*au_sp[i]);
Sum += sum*au_sp[i];
}
else continue;
}
/*
for (int i = 0;i<n;i++)
printf("%d ",C[i]);
printf("\n");
for (int i = 0;i<n;i++)
printf("%d ",au_sp[i]);
printf("\n");
*/
printf("%d",Sum);
return 0;
}