Изменения
→Решение за время O(N2)
p[j] = best_ind
'''if''' a[i] > b[j] '''and''' d[i-1][j] > best // в момент следующего равенства a[i] = b[j'] нам не придётся бежать циклом в поисках элемента k:
best = d[i-1][j] // b[k] < b[j'] = a[i]. Мы считаем элемент a[i] фиксированным и сравниваем кандидатов с ним
best_ind = j
// восстановление (по массиву b)