Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.11.2019
Сообщений: 3

Дерево Фенвика

19.11.2020, 12:03. Показов 5642. Ответов 0
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Решаю задачу на сумму на подотрезке, используя дерево фенвика.
Задача:
A. Дерево Фенвика
ограничение по времени на тест1 секунда
ограничение по памяти на тест256 мегабайт
вводстандартный ввод
выводстандартный вывод
Дан массив из N элементов, нужно научиться находить сумму чисел на отрезке.

Входные данные
Первая строка входного файла содержит два целых числа N и K — количество чисел в массиве и количество запросов (1⩽N⩽100000, 0⩽K⩽100000). Следующие K строк содержат следующие запросы:

A i x — присвоить i-му элементу массива значение x (1⩽i⩽n, 0⩽x⩽109);
Q l r — найти сумму чисел в массиве на позициях от l до r (1⩽l⩽r⩽n).
Изначально в массиве живут нули.

Выходные данные
На каждый запрос вида Q l r нужно вывести единственное число — сумму на отрезке.
Код:
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
40
41
42
43
44
45
#include <iostream>
#include <vector>
#define endl '\n'
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
const int N = 1e6;
long long t[N];
int n, k;
vector<long long> a;
long long sum(int r)
{
    long long res = 0;
    for (int i = r; i >= 0; i = (i & (i + 1)) - 1)
        res += t[i];
    return res;
}
 
void update(int i, long long v)
{
    for (int j = i; j <= n; j = j | (j + 1))
    {
        t[j] += v;
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
#endif // _DEBUG
    cin >> n >> k;
    a.assign(n, 0);
    for (int i = 0; i < k; i++)
    {
        char c;
        int l, r;
        cin >> c >> l >> r;
        if (c == 'A')
        {
            update(l, r - a[l]);
        }
        else {
            cout << sum(r) - sum(l - 1) << endl;
        }
    }
}
Претест:
5 9
A 2 2
A 3 1
A 4 2
Q 1 1
Q 2 2
Q 3 3
Q 4 4
Q 5 5
Q 1 5
Можете пожалуйста помочь найти ошибку/тест на котором не работает/помочь решить задачу. Заранее спасибо

Добавлено через 11 минут
Уже нашел ошибку. Ошибка очень тупая - не обновляю значения в массиве a. Рабочий код, если кому-то нужен:
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
40
41
42
43
44
#include <iostream>
#include <vector>
#define endl '\n'
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
const int N = 1e6;
long long t[N], a[N];
int n, k;
long long sum(int r)
{
    long long res = 0;
    for (int i = r; i >= 0; i = (i & (i + 1)) - 1)
        res += t[i];
    return res;
}
 
void update(int i, long long v)
{
    for (int j = i; j <= n; j = j | (j + 1))
    {
        t[j] += v;
    }
}
int main()
{
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
#endif // _DEBUG
    cin >> n >> k;
    for (int i = 0; i < k; i++)
    {
        char c;
        int l, r;
        cin >> c >> l >> r;
        if (c == 'A')
        {
            update(l, r - a[l]);
            a[l] = r;
        }
        else {
            cout << sum(r) - sum(l - 1) << endl;
        }
    }
}
Запомните, друзья, на лекции головать думать надо, а не тупо списывать код)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2020, 12:03
Ответы с готовыми решениями:

3-х мерное дерево Фенвика
Дана такая задача: есть трехмерное пространство. Поступают запросы вида увеличить количество элементов в параллелепипеде от 0, 0, 0 до x,...

Решение задачи нахождения сумм с использованием дерева Фенвика
Разработать программную реализацию решения задачи нахождения сумм с использованием дерева Фенвика

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2020, 12:03
Помогаю со студенческими работами здесь

Дано дерево. Распечатать дерево по уровням
Дано дерево. Распечатать дерево по уровням.

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Напишите программу, которая бы читала дерево в формате (а) и затем печатала бы это дерево в формате (б).
Представление дерева: а) Д (Б (А, Ф (В,)), Е (,З (Ж, И))) б) Д Б А Ф ...

Дерево дерево, странное дерево
Нужна помощь в построении дерева. Задание таково: Вершина дерева содержит N целых значений и два указателя на потомков. Запись значений...

Дерево, бинарное дерево
Читаю про дерево и не до конца понимаю, а точнее понимаю, но вопрос в том, правильно ли я понимаю, надеюсь вы мне подскажите. Вот есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru