Cod sursa(job #2891056)

Utilizator hobbitczxdumnezEU hobbitczx Data 17 aprilie 2022 13:37:19
Problema Datorii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("datorii.in");
ofstream fout ("datorii.out");

const int N_MAX = 15e3 + 5;

int arb[4 * N_MAX] , n , m , a[N_MAX];

void build(int st , int dr , int node){
    if (st == dr){
        arb[node] = a[st];
        return;
    }
    int mij = (st + dr) / 2;
    build(st , mij , 2 * node);
    build(mij + 1 , dr , 2 * node + 1);
    arb[node] = arb[2 * node] + arb[2 * node + 1];
}

void update (int st ,int dr , int poz , int val , int node){
    if (st > poz || dr < poz){
        return;
    }
    if (st == dr){
        arb[node] -= val;
        return;
    }
    int mij = (st + dr) / 2;
    update(st , mij , poz , val , 2 * node);
    update(mij + 1 , dr , poz , val , 2 * node + 1);
    arb[node] = arb[2 * node] + arb[2 * node + 1];
}

int query (int st , int dr , int Qst , int Qdr , int node){
    if (st > Qdr || dr < Qst){
        return 0;
    }
    if (Qst <= st && dr <= Qdr){
        return arb[node];
    }
    int mij = (st + dr) / 2;
    return query(st , mij , Qst , Qdr , 2 * node) + query(mij + 1 , dr , Qst , Qdr , 2 * node + 1);
}

int main(){
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fin >> n >> m;
    for (int i=1; i<=n; i++){
        fin >> a[i];
    }
    build(1 , n , 1);
    while (m--){
        int op , l , r; fin >> op >> l >> r;
        if (op == 0){
            update(1 , n , l , r , 1);
        }
        else{
            fout << query(1 , n , l , r , 1) << '\n';
        }
    }
}