Pagini recente » Cod sursa (job #3339208) | Cod sursa (job #1778129) | Cod sursa (job #3341485) | Cod sursa (job #1266262) | Cod sursa (job #3338870)
#include <bits/stdc++.h>
using namespace std;
int a[15010], H[35000];
int n, m, nr, idx, f, l, r;
void build(int start, int end, int node) {
if(start == end) {
H[node] = a[start];
return;
}
int mid = (start + end) >> 1;
build(start, mid, 2*node);
build(mid+1, end, 2*node+1);
H[node] = H[2*node] + H[2*node+1];
}
void update(int start, int end, int node) {
if(start == end) {
H[node] -= nr;
return;
}
int mid = (start + end) >> 1;
if(idx <= mid) update(start, mid, 2*node);
else update(mid+1, end, 2*node+1);
H[node] = H[2*node] + H[2*node+1];
}
int query(int start, int end, int node) {
if(l <= start && end <= r) return H[node];
int mid = (start + end) >> 1;
int leftSum = 0, rightSum = 0;
if(l <= mid) leftSum = query(start, mid, 2*node);
if(r > mid) rightSum = query(mid+1, end, 2*node+1);
return leftSum + rightSum;
}
int main() {
ifstream fin("datorii.in");
ofstream fout("datorii.out");
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
build(1, n, 1);
for(int i = 0; i < m; i++) {
cin >> f;
if (f) {
cin >> l >> r;
cout << query(1, n, 1) << '\n';
} else {
cin >> idx >> nr;
update(1, n, 1);
}
}
return 0;
}