Cod sursa(job #2940177)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 14 noiembrie 2022 22:32:25
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f ("datorii.in");
ofstream g ("datorii.out");

const int NMAX = 15e3;
int ain[NMAX*4 + 4];
int n, q;

void update(int nod, int st, int dr, int poz, int val){
    if(st == dr){
        ain[nod] += val;
        return;
    }
    int mij = (st+dr)/2;
    if(poz <= mij)  update(2*nod, st, mij, poz, val);
    else update(2*nod+1, mij+1, dr, poz, val);
    ain[nod] = ain[2*nod] + ain[2*nod+1];
}

void sum(int nod, int st, int dr, int bg, int end, int &suma){
    if(bg <= st and dr <= end){
        suma += ain[nod];
        return;
    }
    int mij = (st+dr)/2;
    if(bg <= mij)  sum(2*nod, st, mij, bg, end, suma);
    if(mij < end)  sum(2*nod+1, mij+1, dr, bg, end, suma);
 }

int main()
{
    f>>n>>q;
    for(int i=1; i<=n; i++){
        int k;
        f>>k;
        update(1, 1, n, i, k);
    }
    for(int i=1; i<=q; i++){
        int t, a, b;
        f>>t>>a>>b;
        if(t==1){
            int suma = 0;
            sum(1, 1, n, a, b, suma);
            g<<suma<<"\n";
        }else{
            update(1, 1, n, a, -b);
        }
    }

    return 0;
}