bzoj2013
按照长度排序
考虑对于前i-1的元素的排列,第i个元素可以插入的合法位置为x
在排好序的序列中二分找可以插入的位置满足a[i]<=a[k]+D
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 620005
#define mod 1000000009
#define LL long long
using namespace std;
int n,D;
LL ans;
int a[maxn];
int main()
{
scanf("%d%d",&n,&D);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
ans=1;
int t;
for(int i=2;i<=n;i++){
t=lower_bound(a+1,a+i+1,a[i]-D)-a;
t=(i-t+1);
ans=(ans*1ll*t)%mod;
}
printf("%lld\n",ans%mod);
return 0;
}