Cod sursa(job #2615566)

Utilizator buhaidarius@gmail.comBuhai Darius [email protected] Data 14 mai 2020 20:52:23
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

#define MAXN 400010

using namespace std;

int n, m;
int arbint[MAXN];

void update(int l, int r, int p, int x, int i = 0, bool sub= false){
    if(l==r){
        if(sub) arbint[i] -= x;
        else arbint[i] = x;
        return;
    }
    int mid = (l+r)/2;
    if(p<=mid) update(l, mid, p, x, i*2+1, sub);
    else update(mid+1, r, p, x, i*2+2,sub);
    arbint[i] = arbint[i*2+1] + arbint[i*2+2];
}

int query(int l, int r, int ql, int qr, int i = 0){
    if(ql<=l && qr>=r)
        return arbint[i];
    int mid = (l+r)/2;
    int res = 0;
    if(ql<=mid) res += query(l, mid, ql, qr, i*2+1);
    if(qr>mid)  res += query(mid+1, r, ql, qr, i*2+2);
    return res;
}

int main() {
    int x, a, b;

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

    fin>>n>>m;
    for(int i=0;i<n;++i){
        fin>>x;
        update(0, n-1, i, x);
    }
    while(m--){
        fin>>x>>a>>b;
        if(!x)
            update(0, n-1, a-1, b,0,true);
        else{
            fout<<query(0,n-1, a-1,b-1)<<'\n';
        }
    }
    return 0;
}