Cod sursa(job #1300509)

Utilizator japjappedulapPotra Vlad japjappedulap Data 24 decembrie 2014 15:22:47
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
using namespace std;

ifstream is ("datorii.in");
ofstream os ("datorii.out");

int N, M;
int arb[60006], SUM;

void Update(int N, int L, int R, int pos, int val);
void Sum(int N, int L, int R, int x, int y);

int main()
{
    is >> N >> M;
    for (int i = 1, x; i <= N; ++i)
    {
        is >> x;
        Update(1, 1, N, i, x);
    }
    for (int i = 1, x, y, OP; i <= M; ++i)
    {
        is >> OP >> x >> y;
        if (OP == 0)
            Update(1, 1, N, x, -y);
        else
        {
            SUM = 0;
            Sum(1, 1, N, x, y);
            os << SUM << '\n';
        }
    }
    is.close();
    os.close();
}

void Update(int N, int L, int R, int pos, int val)
{
    if (L == R)
    {
        arb[N] += val;
        return;
    }
    int M = (L+R)/2;
    if (pos <= M) Update(N*2, L, M, pos, val);
    else Update(2*N+1, M+1, R, pos, val);
    arb[N] = arb[2*N]+arb[2*N+1];
};

void Sum(int N, int L, int R, int x, int y)
{
    if (x <= L && R <= y)
    {
        SUM += arb[N];
        return;
    }
    int M = (L+R)/2;
    if (x <= M) Sum(2*N, L, M, x, y);
    if (M < y) Sum(2*N+1, M+1, R, x, y);
};