queue<int> ends; // очередь окончаний
int startTime = 0; // возможный старт
for (int i = 0; i < numPackets; i++) {
int arrival, duration;
cin >> arrival >> duration;
// выясняем, когда на самом деле можно стартовать пакет
int realStart = max(startTime, arrival);
// Извлекаем из очереди пакеты, которые обработаны на момент старта
while (!ends.empty() && ends.front() <= arrival) {
ends.pop();
}
if (ends.size() < bufferSize) {
// если на момент старта есть места в очереди, стартуем
cout << realStart << endl;
startTime = realStart + duration; // окончание обработки
ends.push(startTime);
} else {
// Очередь полна, пакет не может быть обработан
cout << -1 << endl;
}
}
Т.е., если в массиве 4 элемента, то элемент на 4 позиции перемещать на 1 позицию, а элементы на 1, 2 и 3 позиции перемещать на 2, 3 и 4 позиции соответственно.
const findOdd = (a) => a.reduce((r, item) => r ^ item);
int i, pos = 0;
for (i = 1; i < y; i++) {
if (a[i] != a[pos]) {
a[++pos] = a[i];
}
}
for (i = pos + 1; i < y; i++) {
a[i] = 0;
}