Cod sursa(job #2747714)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 29 aprilie 2021 16:01:52
Problema Datorii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>
#define intt int_fast32_t
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
vector<intt> arb(50000);
void update(intt st,intt dr,intt poz, intt val, intt nod){
    intt mij=(st+dr)/2;
    arb[nod]+=val;
    if(st!=dr){
        if(poz<=mij) update(st,mij,poz,val,nod*2);
        else update(mij+1,dr,poz,val,nod*2+1);
    }

}

intt query(intt st,intt dr,intt p1,intt p2,intt nod){
    if(st==p1&&dr==p2)return arb[nod];
    intt mij=(st+dr)/2;
    if(p2<=mij) return query(st,mij,p1,p2,nod*2);
    if(p1>mij) return query(mij+1,dr,p1,p2,nod*2+1);
    return query(st,mij,p1,mij,nod*2)+query(mij+1,dr,mij+1,p2,nod*2+1);
}
int main(){
    intt n,m;
    in>>n>>m;
    for(intt i=1;i<=n;i++){
        intt nr;
        in>>nr;
        update(1,n,i,nr,1);
    }
    for(intt i=0;i<m;i++){

        intt t,a,b;
        in>>t>>a>>b;
        if(t==0) update(1,n,a,-b,1);
        else out<<query(1,n,a,b,1)<<"\n";
    }
}