Форум программистов, компьютерный форум CyberForum.ru

Куча, дерево отрезков. Прибавление на отрезке, нахождение сумма на отрезке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Заполнить список с головы, с хвоста, и вывести элементы http://www.cyberforum.ru/cpp-beginners/thread857890.html
Народ, помогите, пожалуйста. исправьте код. Нужно заполнить список с головы, с хвоста, и вывести элементы. И если можно, то покажите, как заполнить первые 5 элементов случайными цифрами, а потом реализовать возможность заполнения с хвоста или с головы... Добавлено через 13 часов 15 минут #include "stdafx.h" #include <iostream> #include <cmath> #include <Windows.h> using namespace...
C++ массивы (перевести программу из незнакомого мне языка c# в знакомый мне с++) здравствуйте уважаемые программисты, помогите пожалуйста перевести программу из незнакомого мне языка c# в знакомый мне с++. вот код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; http://www.cyberforum.ru/cpp-beginners/thread857885.html
C++ Пораздельная компиляция и повоторное переопределением в gcc
Доброго времени суток. Пытаюсь разобрать пример с учебника. Теоритически вроде всё делаю правильно... ilyuha21st@coldshoot:~/Projects/calc$ g++ calc.cpp -c -o calc.o ilyuha21st@coldshoot:~/Projects/calc$ g++ main.cpp -c -o main.o ilyuha21st@coldshoot:~/Projects/calc$ g++ main.o calc.o -o prog calc.o:(.bss+0x0): multiple definition of `Driver::no_of_errors' main.o:(.bss+0x0): first defined...
Ошибка в коде C++
Прветствую всех! printf("Введите расположение файла (например: C:\\myfile.txt):/n"); char * s; scanf("%s", &s); FILE * doc; doc = fopen(s, "a"); if(doc != NULL) { printf("Введите строку для записи:/n");
C++ надо написать две проги на с+= http://www.cyberforum.ru/cpp-beginners/thread857873.html
нужна 1, 2 лаба, 3вариант
C++ виход из проги клавишей Esc Как на С++ зделать чтоб из программы виходило при нажатии Esc,что прописывать ? подробнее

Показать сообщение отдельно
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.05.2013, 18:46     Куча, дерево отрезков. Прибавление на отрезке, нахождение сумма на отрезке
Написал вот класс Кучки. Сейчас она может увеличить значения всех элементов на отрезке l - r на величину c (время O(logN)), а так же выдать значение элемента с индексом idx (O(logN)). Видимо, сделал я её не стандартно, так как придумывал сам во время олимпиады, а теперь захотелось немного доработать её и добавить функцию суммы на отрезке l - r и тоже за время O (logN). Help.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
template <typename E>
class THeap {
private:
    vector <E> heap;
    int n;
 
    void hp_add(int l, int r, E c) {
        if (l > r)
            return;
        if (l%2 == 0) {
            heap[l] += c;
            l++;
        }
        if (r%2 == 1) {
            heap[r] += c;
            r--;
        }
        hp_add((l-1)/2, (r/2)-1, c);
    }
 
    E hp_get(int idx) {
        if (idx == 0) 
            return heap[0];
        if (idx%2 == 0) 
            return heap[idx] + hp_get((idx/2)-1);   
        return heap[idx] + hp_get((idx-1)/2);
    }
public:
    THeap(int _n, E c) {
        n = _n;
        heap = vector <E> (2*n-1, c);
    }
    void add(int l, int r, E c) {
        hp_add(l + n - 1, r + n - 1, c);
    }
    E get(int idx) {
        return hp_get(idx + n - 1);
    }
};
Добавлено через 1 минуту
Примерчик.
C++
1
2
3
4
THeap<long long> hp(5, 0);
hp.add(2, 3, 2);
hp.add(3, 4, 1);
long long c = hp.get(3);
Добавлено через 14 часов 59 минут
..up..

Добавлено через 57 минут
--up--

Добавлено через 3 часа 29 минут
$$ up $$
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru