Дан массив arr, который инициализируется значением 0, т.е. arr[i]=0, где 0 ‹ i ‹ n
над ним выполняются две операции
обновить к р х
Обновление делает следующее:
for(i=k;i<=r;i++) { arr[i]=x; x+=x; }
запрос к р
Запрос вычисляет следующую сумму:
for(i=k;i<=r;i++) { sum+=arr[i]; } print(sum);
Мое решение:
Я думал о грубой силе, но это медленно. Я думал о дереве сегментов, но в дереве сегментов обновление выполняется с постоянной величиной, поэтому оно не работает. Какой может быть хороший алгоритм для решения этой проблемы?
Ограничения
размер массива ‹=10^5
количество операций(обновление,запрос) ‹=10^5