Cod sursa(job #2754932)

Utilizator Zamolxis25Sebastian Gradinaru Zamolxis25 Data 26 mai 2021 18:00:17
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>

using namespace std;

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

int N,M, Arb[4 * 15001], a[15001], start, finish, val, pos, sum;

inline int Minim(int a, int b) {
    if ( a < b ) return a;
    return b;
}

void Update(int nod, int left, int right){
    if(left == right){
        Arb[nod] += val;
        return;
    }

    int div = (left+right)/2;
    if(pos <= div) Update(2*nod, left, div);
    else Update(2*nod+1, div+1, right);

    Arb[nod] = Arb[2*nod] + Arb[2*nod+1];
}

int Query(int nod, int left, int right){
    if(start <= left && right <= finish){
        return Arb[nod];
    }

    int ans1 = 0, ans2 = 0;

    int div = (left + right)/2;
    if(start <= div) ans1 = Query(2*nod, left, div);
    if(div < finish) ans2 = Query(2*nod+1, div+1, right);
    sum = ans1 + ans2;
    return sum;
}

int main(){

    int op, A, B;

    fin>>N>>M;
    for(int i = 1; i<=N; i++){
        fin>>a[i];
        pos = i, val = a[i];
        Update(1,1,N);
    }

    for(int i = 1; i<=M; i++){
        fin>> op >> A >> B;

        sum = 0;
        start = A, finish = B;

        if(op == 0) {
            val = -B;
            Update(1, 1, N);
        }
        else{
            fout << Query(1,1,N)<<"\n";
        }


        //fout<<minim<<"\n";
    }

    return 0;
}