Обьясните что делает код

Вообщем есть массив на і элементов. Программа после i элемента удаляет i элементов т.е после 0 элемента удаляет 0 элементов, после 1 элемента 1 элемент, после 2 удаляет 2 и т.д. [1 2 3 4 5]-[1 2 4] Помогите разобрать код, как он работает я не пойму. Функция fillArr(size) это заполнение массива элементами

int main()
{
setlocale(LC_ALL,"rus");
int size=0;
cout << "Task 1" << endl;
cout << "Введите размер массива: ";
cin >> size;   
fflush(stdin);
int *arr= fillArr(size);
int nsize = size,nsize2 = size;
int k = 0;

for(int i = 0; i < nsize; i++)
{
    for(int j = 0; j < i;j++)
    {
        for(int m = 0;m<nsize-i;m++)
        {
            arr[m + k + 1] = arr[m + k + 2];
        }
        nsize--;
        if(nsize - i > 0)
        nsize2--;
     }
     k++;
 }
 for(int i = 0; i < nsize2; i++)
 {
    cout << arr[i] << " ";
 }
    cout << endl;
 }` `

Ответы (1 шт):

Автор решения: Zhihar

код просто смещает правую часть массива влево на i элементов, т.е. по сути вырезает i элементов

for(int i = 0; i < nsize; i++)
{
    // вырезаем i элементов после i-ого элемента

    // увеличиваем размер нового массива
    k++;
}

смещаем элементы массива на i влево

for(int j = 0; j < i;j++)
{
    for(int m = 0;m<nsize-i;m++)
    {
        arr[m + k + 1] = arr[m + k + 2];
    }
}

но вообще код несколько кривоват и избыточен, можно сделать гораздо проще и за время O(n)

→ Ссылка