В C#, Java и других языках обычно есть класс, представляющий собой список, в который можно добавлять новые элементы. Внутри из соображений эффективности его часто реализуют с помощью массива, в котором зарезервировано места с запасом. Как только место заканчивается, выделяется место под больший массив и все элементы копируются в него.

Часто такой трюк реализации называют динамический массив. В C# эта концепция встречается в нескольких классах и методах: List, ArrayList, в методе ToArray() и, наверняка, ещё много где.

Вот так это может быть реализовано:

1. Какая сложность у метода AddRange? 1 балл