Cod sursa(job #2823365)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 28 decembrie 2021 11:55:30
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#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);
        }
    }
}