Как работает данный код? с++

Решаю задачи из CSES Problem Set. Сразу оставлю ссылку на саму задачу, где можно найти условие и проверяющую систему: ссылка

Решил сначала задачу простым путем, просто через set<int> с удалением элементов, но на последних двух тестах получаю вердикт TIME LIMIT EXCEEDED.

Ничего не придумав, решил поискать решение в интернете, и наткнулся на вот такой код:

int n; cin>>n;
int a = 1, b = 0;
while(n > 0) {
    for (int i = 2; i <= n; i+=2) {
        cout<<a*i + b<<' ';
    }
    if (n&1) cout<<a + b<<' ', b += a;
    else b -= a;
    a <<= 1;
    n >>= 1;
}

И вот вопрос, как работает этот код? Я несколько раз прошелся дебагером, но так ничего и не понял.


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