Блог пользователя Easy_

Автор Easy_, 12 лет назад, По-русски

Господа, есть отсортированный вектор V из 10^7 элементов.

Например:

0 0 1 1 1 2 3 4 4 5 ...

Далее первый элемент вектора увеличивается на K, после чего вектор должен быть отсортирован.

Хотел бы узнать, какой из следующий методов является быстрее:

1)

V[0] += K;
sort(V.begin(), V.end());

2)

V[0] += K; i = 0;
while(A[i] > A[i + 1] && i < N - 1)
        swap(A[i], A[i + 1]), i++;

3)

V[0] += K;
Через модифицированный бинарный поиск найти индекс **ind** куда можно вставить наш элемент
V.insert(ind, V[0]);
V.erase(V.begin());

4) Ваш вариант.

Буду благодарен.

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
← Rev. 4  
Проголосовать: нравится +8 Проголосовать: не нравится

1) 2) O(n) 3) 4) использовать список

»
12 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Если все время нужно получать только самый большой элемент, лучше всего реализовывать двоичную кучу. Она же (скорее всего) реализована в priority_queue. Можете посмотреть ее реализацию вручную: 7099319, задча 446B - DZY любит модификации.