Pagini recente » Cod sursa (job #2829429) | Cod sursa (job #1327824) | Cod sursa (job #2896632) | Cod sursa (job #3251799) | Cod sursa (job #3294104)
#include<bits/stdc++.h>
using namespace std;
int a[15001], arb[60001], posInArb[15001], n, q;
void buildArb(int st, int dr, int nod) {
if(st==dr) {arb[nod]=a[st]; posInArb[st]=nod;}
else{
int mid=(st+dr)/2;
buildArb(st, mid, nod*2);
buildArb(mid+1, dr, nod*2+1);
arb[nod]=arb[nod*2]+arb[nod*2+1];
}
}
void update(int k, int paid){
arb[posInArb[k]]-=paid;
int idx=posInArb[k];
while(idx>1) {
idx/=2;
arb[idx]=arb[idx*2]+arb[idx*2+1];
}
}
int suma(int a, int b, int st, int dr, int nod) {
if(st>b || dr<a) return 0;
if(st>=a && dr<=b) return arb[nod];
int mid=(st+dr)/2;
return suma(a,b,st,mid,nod*2)+suma(a,b,mid+1,dr,nod*2+1);
}
int main(){
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
cin>>n>>q;
for(int i=1; i<=n; i++) cin>>a[i];
buildArb(1,n,1);
while(q--) {
int c; cin>>c;
if(c==1) {
int p,q; cin>>p>>q;
cout<<suma(p,q,1,n,1)<<"\n";
}
else{
int v,t; cin>>t>>v;
update(t,v);
}
}
return 0;
}