Cod sursa(job #1830320)

Utilizator valentin50517Vozian Valentin valentin50517 Data 16 decembrie 2016 15:43:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;

#define NMAX 15100

int st,dr,VAL,IND,ARB[4*NMAX]; // folosim pentru operatiile pe arbore
int N,M;

void update(int l,int r,int nod){
    if(l == r){
        ARB[nod] -= VAL;
        return;
    }
    
    int mid = (l+r)/2;
    
    if(IND <= mid) update(l,mid,2*nod);
    else update(mid+1,r,2*nod+1);
    
    ARB[nod] = ARB[2*nod] + ARB[2*nod+1]; // de data asta pastram suma numerelor
}

int query(int l,int r,int nod){
    if(st <= l && r <= dr) return ARB[nod];
    
    int a=0,b=0,mid = (l+r)/2;
    
    if(st <= mid) a = query(l,mid,2*nod);
    if(dr > mid)  b = query(mid+1,r,2*nod+1);
    
    return a+b; 
}

int main() {
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    
    cin >> N >> M;
    
    for(IND = 1;IND<=N;IND++){
        cin >> VAL;
        VAL*=-1;
        update(1,N,1);
    }
    
    for(int t;M--;){
        cin >> t;
        if(t){
            cin >> st >> dr;
            cout << query(1,N,1) << '\n';
        }else{
            cin >> IND >> VAL;
            update(1,N,1);
        }
    }
}