Cod sursa(job #2747712)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 29 aprilie 2021 15:59:00
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define int int_fast32_t
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
vector<int> arb(50000);
void update(int st,int dr,int poz, int val, int nod){
    int 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);
    }

}

int query(int st,int dr,int p1,int p2,int nod){
    if(st==p1&&dr==p2)return arb[nod];
    int 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(){
    int n,m;
    in>>n>>m;
    for(int i=1;i<=n;i++){
        int nr;
        in>>nr;
        update(1,n,i,nr,1);
    }
    for(int i=0;i<m;i++){

        int 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";
    }
    return 0;
}