1
const RANGE_MIN: i32 = -10_000;2
const RANGE_MAX: i32 = 10_000;5
pub fn longest_subsequence(arr: Vec<i32>, difference: i32) -> i32 {6
let range = (RANGE_MAX - RANGE_MIN + 1) as usize;7
fn offset(i: i32) -> Option<usize> {8
if RANGE_MIN <= i && i <= RANGE_MAX {9
Some((i - RANGE_MIN) as usize)14
/// "Length when last seen"; longest subseq when we last saw that arr[i] value15
let mut lwls = vec![0_i32; range];17
for &a in arr.iter().rev() {18
let old = offset(a + difference).map(|i| lwls[i]).unwrap_or(0);19
let new_idx = offset(a).unwrap(); // safety: problem constraints20
let len = lwls[new_idx].max(old + 1);