c++
class NumArray {
public:
NumArray(vector<int> &nums) {
nums_bk = nums;
int sum_val = 0;
cums.push_back(0);
for (auto &v : nums) {
sum_val += v;
cums.push_back(sum_val);
}
}
void update(int i, int val) {
int org = nums_bk[i];
nums_bk[i] = val;//update
int diff = val - org;
for (int k = i + 1; k < cums.size(); ++k) {
cums[k] += diff;
}
}
int sumRange(int i, int j) {
i++;
j++;
return cums[j] - cums[i-1];
}
private:
vector<int> cums;
vector<int> nums_bk;
};