Я не уверен, что алгоритм правильный, но есть 2 строки, которые могут вызвать ошибку сегментации:
while((arr[l+1]>arr[q.back()])&&(!q.empty()))
Причина в том, что вы проверяете q.back()
до q.empty()
, если он пустой результат будет неопределенным поведением. Измените это на:
while((!q.empty())&&(arr[l+1]>arr[q.back()]))
Таким образом, он проверит, является ли он первым пустым, и тормозит l oop, если он пуст, перед проверкой q.back()
и выдачей ошибки сегментации.
Вторая строка:
while(q.front()<=j-k)
q.pop_front();
Я думаю, вы должны проверить, если она пуста, как первая строка.