Pagini recente » Cod sursa (job #3126041) | Cod sursa (job #3181866) | Cod sursa (job #1304216) | Cod sursa (job #817760) | Cod sursa (job #2422480)
#include <bits/stdc++.h>
using namespace std;
int a[100100],h[100100],n,m;
int x,y;
void update(int nod,int st,int dr){
//if (x<st || x>dr) return;
if (st==dr){
h[nod]-=y;
return;
}
int mid=(st+dr)/2;
if (x<=mid) update(nod*2,st,mid);
else update(nod*2+1,mid+1,dr);
h[nod]=h[2*nod]+h[2*nod+1];
return;
}
int query(int nod,int st,int dr){
//if (x>dr || y<st) return 0;
if (st>=x && dr<=y) return h[nod];
int mid=(st+dr)/2;
int left=0, right=0;
if (x<=mid) left=query(nod*2,st,mid);
if (y>mid) right=query(nod*2+1,mid+1,dr);
return right+left;
}
void build(int nod, int start, int end){
if (start==end){
h[nod]=a[start];
return;
}
int mid=(start+end)/2;
build(2*nod,start,mid);
build(2*nod+1,mid+1,end);
h[nod]=h[nod*2]+h[nod*2+1];
}
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,1,n);
while(m--){
int k; cin>>k;
if (k==0){
cin>>x>>y;
update(1,1,n);
}
else{
cin>>x>>y;
cout<<query(1,1,n)<<'\n';
}
}
return 0;
}