1function sqrtDecompose(nums) {
2 const n = nums.length, size = Math.ceil(Math.sqrt(n));
3 const blocks = new Array(Math.ceil(n / size)).fill(0);
4 for (let i = 0; i < n; i++) blocks[Math.floor(i / size)] += nums[i];
5 return { nums, blocks, size };
6}
7function querySum(st, l, r) {
8 let sum = 0;
9 for (let i = l; i <= r; i++) {
10 if (i % st.size === 0 && i + st.size - 1 <= r) {
11 sum += st.blocks[i / st.size];
12 i += st.size - 1;
13 } else {
14 sum += st.nums[i];
15 }
16 }
17 return sum;
18}
19function update(st, i, val) {
20 const b = Math.floor(i / st.size);
21 st.blocks[b] += val - st.nums[i];
22 st.nums[i] = val;
23}