Не подходит правильный подход к стеку. просто посмотрите, что произойдет, если у вас на входе 6, 9, 12, 17, 11, 15 . Когда вы будете работать с 15, ваш стек был забыт о 12 и 17. Но ближайший маленький левый элемент A [5] равен 12.
Алгоритм Саида тоже не верен. Просто попробуйте вычислить.
Правильный ответ может быть что-то вроде этого
b[1] = a[1];
s[1] = 1;
for (i=2; i<=n; i+=1) {
j = i - 1;
while (j>1){
if (a[j]<a[i]) {
b[i] = a[j];
s[i] = j;
break;
} else {
j = s[j];
}
}
if (j = 1) {
b[i] = a[j];
s[i] = j;
}
}
Я не уверен, но это имеет сложность O (n).