N, D = map(int, input().split())
blocks = sorted(list(map(int, input().split())))
def binary_search_i(l, r, size, list):
ans = r + 1
while r >= l:
m = (l + r) // 2
# m = l + floor(log10(r - l + 1))
# m = l + (r - l) // 1000000
if size <= list[m] + D:
r = m - 1
ans = m
else:
l = m + 1
return ans
def binary_search_j(l, r, size, list):
ans = r + 1
while r >= l:
m = (l + r) // 2
if list[m] > size + D:
r = m - 1
ans = m
else:
l = m + 1
return ans
def multiply(a, n):
if n == 2:
return a << 1
elif n == 3:
return a + (a << 1)
elif n == 4:
return a << 2
elif n == 5:
return a + (a << 2)
elif n == 6:
return (a << 1) + (a << 2)
elif n == 7:
return (a << 3) - a
elif n == 8:
return a << 3
elif n == 9:
return a + (a << 3)
elif n == 10:
return (a << 1) + (a << 3)
elif n == 11:
return a + (a << 1) + (a << 3)
elif n == 12:
return (a << 2) + (a << 3)
elif n == 13:
return a + (a << 2) + (a << 3)
elif n == 14:
return (a << 4) - (a << 1)
elif n == 15:
return (a << 4) - a
else:
return a * n
ans = 1
i = 0
j = 1
while j < N:
prev_j = j
while blocks[j] > blocks[i] + D:
i += 1
# i = binary_search_i(i, j - 1, blocks[j], blocks)
# if i < j:
# j = binary_search_j(prev_j, N - 1, blocks[i], blocks)
# for k in range(prev_j, j):
# ans *= (k - i + 1)
if i < j:
ans *= j - i + 1
if ans > 2000000000:
ans = ans % 1000000009
j += 1
print(ans % 1000000009)
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
3048 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
14 ms |
2976 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
2968 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
2980 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
2972 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
2972 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
3028 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
16 ms |
3256 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
4188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
75 ms |
8584 KB |
Output is correct |
2 |
Correct |
57 ms |
8532 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
290 ms |
30676 KB |
Output is correct |
2 |
Correct |
243 ms |
30688 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
595 ms |
75924 KB |
Output is correct |
2 |
Correct |
788 ms |
75980 KB |
Output is correct |