Problem:
Score : 400 points

Problem Statement

You are given a sequence A_1, A_2, ..., A_N and an integer K.

Print the maximum possible length of a sequence B that satisfies the following conditions:

B is a (not necessarily continuous) subsequence of A.

For each pair of adjacents elements of B, the absolute difference of the elements is at most K.

Constraints

1 \leq N \leq 300,000

0 \leq A_i \leq 300,000

0 \leq K \leq 300,000

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
A_1
A_2
:
A_N

Output

Print the answer.

Sample Input 1

10 3
1
5
4
3
8
6
9
7
2
4

Sample Output 1

7

For example, B = (1, 4, 3, 6, 9, 7, 4) satisfies the conditions.

It is a subsequence of A = (1, 5, 4, 3, 8, 6, 9, 7, 2, 4).

All of the absolute differences between two adjacent elements (|1-4|, |4-3|, |3-6|, |6-9|, |9-7|, |7-4|) are at most K = 3.

Solution in Ruby (2.7.1) (judge verdict: Time Limit Exceeded)

class SegmentTree
  def initialize(n)
    @offset = 1 << n.bit_length
    @data = Array.new(@offset * 2, 0)
  end
  def _max(a,b); a > b ? a : b; end
  def max; @data[1]; end
  def update(x, v)
    @data[@offset + x] = v
    k = (@offset + x) / 2
    while k > 0
      @data[k] = _max(@data[2 * k], @data[2 * k + 1])
      k /= 2
    end
    v
  end
  def range_max(a, b, k = 1, l = 0, r = @offset)
    return 0 if b <= l || r <= a
    return @data[k] if a <= l && r <= b
    mid = (l + r) / 2
    return _max(range_max(a,b,2 * k, l, mid), range_max(a,b,2 * k + 1, mid, r))
  end
end
def max(a,b); a > b ? a : b; end
def min(a,b); a < b ? a : b; end
V_MAX = 300_100
N, K = gets.split.map(&:to_i)
st = SegmentTree.new(V_MAX)
A = N.times.map{ gets.to_i }
A.each do |a|
  v = st.range_max(max(0, a - K), min(a + K + 1,V_MAX))
  st.update(a, v + 1)
end
puts st.max