По хорошему, вы должны использовать std::vector. А он умеет удалять все сам.
std::vector<int> a = {1, 2 ,3 ,4 ,5};
// Удалит элементы с l по r (l включительно, не удалит r).
// Если надо удалить r-ый элемент, то добавьте +1 во второй аргумент.
a.erase(a.begin()+l, a.begin()+r);
Если же вы хотите делать руками, то надо просто посмотреть, куда двигаются элементы. Те, что до l - не двигаются. Те, что от l до r - исчезают. Те, что после r сдвигаются влево на r-l+1 позиций.
for (i = l; i < n - 1 + l - r; ++i) {
a[i] = a[i + r - l + 1];
}
// New length: n -1 + l - r;