Существует n сегментов, каждому сегменту назначается поток. Максимальный размер стека потока, назначенного i-му сегменту, обозначается threadSize для всех 1 ≤ i ≤ n.
Для любого высокоприоритетного процесса размеры стека некоторых сегменты необходимо увеличить. Сегмент i называется особенным, если threadSize < threadSize > threadSize[i + 1]. Однако сегменты на каждом конце не могут быть особенными.
Цель состоит в том, чтобы изменить размеры стека таким образом, чтобы максимально увеличить количество специальных сегментов. Вам разрешено выбрать любой сегмент и увеличить размер его стека на x. Более формально:
- Выберите индекс i и целое число x, где 0 ≤ x ≤ 10^18.
< /li>
Увеличить размер стека i-го сегмента с threadSize до threadSize + x.
Как найти минимальное общее увеличение размера стека сегментов для достижения максимального количества специальных сегментов?
long findMinIncrease(vector размер нити) {
Код: Выделить всё
int n = threadSize.size();
long total = 0;
for (int i = n - 2; i >= 1; i--) {
if (threadSize[i] = threadSize[i - 1]) {
int increase = max(threadSize[i + 1], threadSize[i - 1]) - threadSize[i] + 1;
total += increase;
threadSize[i] += increase;
}
}
return total;
Подробнее здесь: https://stackoverflow.com/questions/790 ... ed-process
Мобильная версия