Cod sursa(job #3220228)

Utilizator MariosulmarioMario Badea Mariosulmario Data 2 aprilie 2024 21:14:42
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>

using namespace std;

ifstream cin("datorii.in");
ofstream cout("datorii.out");

int n,m;
int a[60004];

void build(int nod,int l,int r,int valori[]){
    if(l==r){
        a[nod]=valori[l];
    }else{
        int m=(l+r)/2;
        build(2*nod,l,m,valori);
        build(2*nod+1,m+1,r,valori);
        a[nod]=a[2*nod]+a[2*nod+1];
    }
}

void update(int nod,int l,int r,int poz,int val){
    if(l==r){
        a[nod]-=val;
    }else{
        int m=(l+r)/2;
        if(poz<=m){
            update(2*nod,l,m,poz,val);
        }else{
            update(2*nod+1,m+1,r,poz,val);
        }
        a[nod]=a[2*nod]+a[2*nod+1];
    }
}

int query(int nod,int l,int r,int ql,int qr){
    if(ql<=l&&r<=qr){
        return a[nod];
    }
    int m=(l+r)/2;
    int sum=0;
    if(ql<=m){
        sum+=query(2*nod,l,m,ql,qr);
    }
    if(qr>m){
        sum+=query(2*nod+1,m+1,r,ql,qr);
    }
    return sum;
}

int main(){
    cin>>n>>m;
    int valori[15001];
    for(int i=1;i<=n;i++){
        cin>>valori[i];
    }
    build(1,1,n,valori);
    for(int i=0;i<m;i++){
        int tip,x,y;
        cin>>tip>>x>>y;
        if(tip==0){
            update(1,1,n,x,y);
        }else{
            cout<<query(1,1,n,x,y)<<"\n";
        }
    }
}