Pagini recente » Cod sursa (job #2276779) | Statistici Serban Dragos (hexor) | Cod sursa (job #84725) | Monitorul de evaluare | Cod sursa (job #2422476)
#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;
update(nod*2,st,mid);
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=query(nod*2,st,mid);
int 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);
int left=h[nod*2];
int right=h[nod*2+1];
h[nod]=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,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;
}