Monotonic Stack/Deque
fn sliding_argmax<T>(arr: &[T], k: usize) -> Vec<usize>
where
T: std::cmp::PartialOrd,
{
let mut deq = VecDeque::new();
let mut res = vec![usize::MAX; arr.len()];
for i in 0..arr.len() {
while let Some(x) = deq.back() {
if arr[i] >= arr[*x] {
deq.pop_back();
} else {
break;
}
}
deq.push_back(i);
res[i] = *deq.front().unwrap();
if *deq.front().unwrap() + k - 1 == i {
deq.pop_front();
}
}
res
}