Pagini recente » Cod sursa (job #2615144) | Cod sursa (job #2630980) | Cod sursa (job #2189671) | Cod sursa (job #487478) | Cod sursa (job #2205883)
#include<bits/stdc++.h>
#define L 2*nod
#define R 2*nod|1
using namespace std;
int a[15010], H[35000], n,m, nr, idx, f, l, r;
void build(int st, int dr, int nod) {
if (st==dr) {
H[nod] = a[st];
return;
}
int mid = st+dr >> 1;
build(st, mid, L);
build(mid+1, dr, R);
H[nod] = H[L] + H[R];
}
void update(int st, int dr, int nod) {
if (st==dr) {
H[nod]-=nr;
return;
}
int mid = st+dr >> 1;
if (idx <= mid) update(st, mid, L);
else update(mid+1, dr, R);
H[nod] = H[L] + H[R];
}
int query(int st, int dr, int nod) {
if (l<=st && dr<=r) return H[nod];
int mid = st+dr >> 1;
int left = 0, right = 0;
if (l<=mid) left = query(st, mid, 2*nod);
if (r>mid) right = query(mid+1, dr, 2*nod+1);
return left + right;
}
int main() {
ifstream cin("datorii.in");
ofstream cout("datorii.out");
cin>>n>>m;
for (int i=1; i<=n; i++) cin>>a[i];
build(1,n,1); //cream arborele de intervale
for (int i=0; i<m; i++) {
cin>>f;
if (f) {
cin>>l>>r; //p-ru operatie de tip 1 interogam [l,r]
cout<<query(1,n,1)<<'\n';
} else {
cin>>idx>>nr; //p-ru operatia de tip 0 actualizam arborele
update(1, n, 1);
}
}
return 0;
}