8.2 Динамическая память, конструкторы и деструкторы

8.2.1 Буфер чисел

Условие

Реализуйте класс IntBuffer с закрытыми полями размера и указателя на динамический массив. Конструктор explicit IntBuffer(int size) выделяет массив указанного размера и инициализирует все элементы нулями; размер положителен. Деструктор освобождает массив.

Предусмотрите геттер int size() const, метод bool set(int index, int value) и метод bool get(int index, int &value) const. При допустимом индексе методы возвращают true; set изменяет элемент, get записывает элемент в выходной параметр. При недопустимом индексе методы возвращают false, не изменяя массив и, для get, выходной параметр.

Метод long long sum() const возвращает сумму элементов. Обработайте команды SET index value, GET index, SUM. Все обращения к массиву из main должны выполняться через методы.

Ограничения

Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.

Входные данные

В первой строке вводятся размер N и количество команд Q. Следующие Q строк содержат команды. Ограничения: 1 ≤ N ≤ 100000, 1 ≤ Q ≤ 1000, −1 ≤ index ≤ N, −10⁶ ≤ value ≤ 10⁶. Индексация начинается с нуля.

Выходные данные

Для SET выведите OK или ERROR. Для GET — значение элемента либо ERROR. Для SUM — сумму элементов. Каждый ответ выведите с новой строки.

Примеры

Вход 1
3 5
SUM
SET 1 7
GET 1
GET 0
SUM
Ожидаемый выход
0
OK
7
0
7
Вход 2
2 4
SET -1 8
GET 2
SET 0 -5
SUM
Ожидаемый выход
ERROR
ERROR
OK
-5
Вход 3
1 4
SET 0 10
SET 0 20
GET 0
SUM
Ожидаемый выход
OK
OK
20
20

Пробный запуск

Код берётся из редактора. Запуск не создаёт посылку и не влияет на баллы.

Выберите пример или введите свои данные и нажмите «Запустить».

Текущая попытка

Отправьте решение. Этапы и результат появятся здесь автоматически.

Все попытки

Войдите, чтобы видеть свои попытки.

Редактор

Один файл до 64 КиБ · Tab / Shift+Tab — отступ · Esc — выход из редактора · черновик сохраняется для этого аккаунта, задачи и языка.