Pagini recente » Monitorul de evaluare | Cod sursa (job #183524) | Cod sursa (job #2318981) | Cod sursa (job #1280919) | Cod sursa (job #1830320)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 15100
int st,dr,VAL,IND,ARB[4*NMAX]; // folosim pentru operatiile pe arbore
int N,M;
void update(int l,int r,int nod){
if(l == r){
ARB[nod] -= VAL;
return;
}
int mid = (l+r)/2;
if(IND <= mid) update(l,mid,2*nod);
else update(mid+1,r,2*nod+1);
ARB[nod] = ARB[2*nod] + ARB[2*nod+1]; // de data asta pastram suma numerelor
}
int query(int l,int r,int nod){
if(st <= l && r <= dr) return ARB[nod];
int a=0,b=0,mid = (l+r)/2;
if(st <= mid) a = query(l,mid,2*nod);
if(dr > mid) b = query(mid+1,r,2*nod+1);
return a+b;
}
int main() {
ifstream cin("datorii.in");
ofstream cout("datorii.out");
cin >> N >> M;
for(IND = 1;IND<=N;IND++){
cin >> VAL;
VAL*=-1;
update(1,N,1);
}
for(int t;M--;){
cin >> t;
if(t){
cin >> st >> dr;
cout << query(1,N,1) << '\n';
}else{
cin >> IND >> VAL;
update(1,N,1);
}
}
}