Cod sursa(job #2168597)

Utilizator ionutmargineanMarginean Ionut ionutmarginean Data 14 martie 2018 11:41:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");
int Arb[100010];
int n, m, x, op, y;

void actualizare(int nod, int st,int dr,int a,int b,int val)
{int mij;
    if( dr < a || st > b )
        return;
    if( st >= a && dr <= b )
    {
        Arb[nod]-=val;
    }
    else
    {
        mij = ( st + dr ) / 2;
        actualizare( nod * 2, st, mij, a, b, val);
        actualizare( nod * 2 + 1, mij + 1, dr, a, b, val);
        Arb[ nod ]= Arb[ nod*2 ]+ Arb[ nod*2+1 ];
    }
}
int Query(int nod,int st, int dr,int a,int b)
{
    if(dr<a || st>b)
        return 0;
    int mij;
    if(st>=a && dr<=b)
    {
        return Arb[nod];

    }else
    {
        mij=(st+dr)/2;
        return Query(nod*2,st,mij,a,b) + Query(nod*2+1,mij+1,dr,a,b);
    }
}
int main()
{int i;
    fin >> n >> m;
    for( i = 1 ; i <= n ; i++ )
    {
        fin >> x;
        actualizare(1,1,n,i,i,-x);
    }
    for( i = 1 ; i <=m ; i++ )
    {
        fin >> op;
        if( op == 0 )
        {
            fin >> x >> y;
            actualizare(1,1,n,x,x,y);
        }
        else
        {
            fin>>x>>y;
            fout<<Query(1,1,n,x,y)<<'\n';
        }
    }
    return 0;
}