Pagini recente » Cod sursa (job #3238568) | Cod sursa (job #119827) | Cod sursa (job #2039057) | Cod sursa (job #2327463) | Cod sursa (job #2823365)
#include <bits/stdc++.h>
using namespace std;
const int nmax=15001;
int mx[4*nmax+101];
int start,finish,val,pos;
static void update(int nod,int left,int right){
if( left == right ){
mx[nod]+=val;
return;
}
int mid=(left+right)/2;
if(pos<=mid)update(2*nod,left,mid);
else update(2*nod+1,mid+1,right);
mx[nod]=mx[2*nod]+mx[2*nod+1];
}
inline int query(int nod,int left,int right){
if(start<=left && right<=finish)
return mx[nod];
int ans=0;
int mid=(left+right)/2;
if(start<=mid)
ans=ans+query(2*nod,left,mid);
if(mid<finish)
ans=ans+query(2*nod+1,mid+1,right);
return ans;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m;
cin>>n>>m;
for(int i=1,x;i<=n;++i){
cin>>x;val=x;
pos=i;
update(1,1,n);
}
for(int i=1,x,a,b;i<=m;++i){
cin>>x>>a>>b;
if(x==1){
start=a,finish=b;
cout<<query(1,1,n)<<"\n";
}else {
pos=a,val=-b;
update(1,1,n);
}
}
}