Cod sursa(job #2542592)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 10 februarie 2020 11:26:55
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>
#define nmax 15005
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int n,m;
int arb[4*nmax];
void update(int st, int dr, int poz, int pz, int val){
    if(st>pz || dr<pz) return;
    if(st==dr){
        arb[poz] -= val;
        return;
    }
    int mid = (st+dr)/2;
    update(st,mid,2*poz,pz,val);
    update(mid+1,dr,2*poz+1,pz,val);
    arb[poz] = arb[2*poz+1] + arb[2*poz];
}
int fnd(int st, int dr, int poz, int a, int b){
    if(st>b || dr<a) return 0;
    if(st>=a && dr<=b) return arb[poz];
    int mid = (st+dr)/2;
    int e1 = fnd(st,mid,2*poz,a,b);
    int e2 = fnd(mid+1,dr,2*poz+1,a,b);
    return e1+e2;
}
void solve(){
    in >> n >> m;
    for(int i=1; i<=n; i++){
        int x;
        in >> x;
        update(1,n,1,i,-x);
    }
    for(int i=1; i<=m; i++){
        int c,a,b;
        in >> c >> a >> b;
        if(!c){
            update(1,n,1,a,b);
        }
        else{
            out << fnd(1,n,1,a,b) << '\n';
        }
    }
}
int main(){
    solve();
}