Cod sursa(job #2646130)

Utilizator matei8787Matei Dobrea matei8787 Data 31 august 2020 02:00:01
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<bits/stdc++.h>
using namespace std;
const int NMAX = 15005;
int v[NMAX*4];
int fiuStanga ( int i ) { return 2 * i; }
int fiuDreapta ( int i ) { return 2 * i + 1; }
void build ( int nod , int val , int a , int b , int nodJos )
{
    if ( a == b ){
        v[nod] += val;
        return;
    }
    int mij = ( a + b ) / 2;
    if ( nodJos <= mij ){
        build ( fiuStanga(nod) , val , a , mij , nodJos );
    }
    else{
        build ( fiuDreapta(nod) , val , mij + 1 , b , nodJos );
    }
    v[nod] = v[fiuDreapta(nod)] + v[fiuStanga(nod)];
}
int query ( int nod , int st , int dr , int a , int b )
{
    if ( st > b ) return 0;
    if ( dr < a ) return 0;
    if ( st >= a && dr <= b ) return v[nod];
    return query(fiuStanga(nod),st,(st+dr)/2,a,b) + query(fiuDreapta(nod),(st+dr)/2+1,dr,a,b);
}
ifstream in ("datorii.in");
ofstream out ("datorii.out");
int main()
{
    int n,q;
    in>>n>>q;
    for ( int i = 1 ; i <= n ; i++ ){
        int nr;
        in>>nr;
        build(1,nr,1,n,i);
    }
    for ( int i = 1 ; i <= q ; i++ ){
        int p , a , b;
        in>>p>>a>>b;
        if ( p == 0 ){
            build(1,-b,1,n,a);
        }
        else{
            out<<query(1,1,n,a,b)<<'\n';
        }
    }
    return 0;
}