Условие
Реализуйте класс 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 — сумму элементов. Каждый ответ выведите с новой строки.
Примеры
3 5 SUM SET 1 7 GET 1 GET 0 SUM
0 OK 7 0 7
2 4 SET -1 8 GET 2 SET 0 -5 SUM
ERROR ERROR OK -5
1 4 SET 0 10 SET 0 20 GET 0 SUM
OK OK 20 20