If we have to perform range update query many times, Can we reduce the overall time?
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | djm03178 | 152 |
If we have to perform range update query many times, Can we reduce the overall time?
Название |
---|
yes, method of events...
for example:
you want to apply update "L R x" — add x on segment [L;R]
then just add event1 (time = L, change = +x), and event2 (time = R + 1, change = -x)
then just go from 1 to n and apply your events to calculate current element...
And what if we need to query elements?
then there's obviously no solution faster than logn
Why obviously? who proved that?
you're free to think a solution exists... =.=
What is the pre-processing required,and meaning of this line "_go from 1 to n and apply your events to calculate current element.._" Can you explain in detail Please! I am a beginner.
When you have query update L R x, you can do it in O(1): arr[L]+=x;arr[R+1]-=x; Then the value of the element on position i will be arr[1]+arr[2]+...+arr[i].
If in case we have large number of point update queries,can we also reduce the overall time?