Pagini recente » Cod sursa (job #2235263) | Monitorul de evaluare | Rating Oanea Gabriel (AENAO17) | Cod sursa (job #1514059) | Cod sursa (job #2289543)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, p, q;
int a[15000];
int tree[100005];
void build(int node, int l, int r) {
if (l==r) {tree[node]=a[l];}
else {
int mid=(l+r)/2;
build(2*node, l, mid);
build(2*node+1, mid+1, r);
tree[node]=tree[2*node]+tree[2*node+1];
}
}
void update(int nodeIndex, int start, int end, int idx) {
if (start == end) {
tree[nodeIndex] += a[start];
} else {
int mid = (start + end) / 2;
if (start <= idx and idx <= mid) {
update(2*nodeIndex, start, mid, idx);
} else {
update(2*nodeIndex + 1, mid + 1, end, idx);
}
tree[nodeIndex] = tree[2*nodeIndex] + tree[2*nodeIndex + 1];
}
}
int query(int nodeIndex, int start, int end) {
if (p <= start and end <= q) {
return tree[nodeIndex];
} else {
int mid = (start + end) / 2;
int suml=0,sumr=0;
if(p<=mid) suml=query(2*nodeIndex, start, mid);
if(mid+1<=q) sumr=query(2*nodeIndex + 1, mid + 1, end);
return suml+sumr;
}
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
build(1,1,n);
int cod;
for (int i = 1; i <= m; i++) {
fin >> cod;
if (cod) {
fin >> p >> q;
fout << query(1, 1, n) << endl;
} else {
int t, v;
fin >> t >> v;
a[t] = -v;
update(1, 1, n, t);
}
}
return 0;
}