Cod sursa(job #2901836)

Utilizator Stefan_GhinescuGhinescu Stefan-George Stefan_Ghinescu Data 14 mai 2022 16:13:32
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

const int NMAX = 15e3;

int arbint[5 * NMAX + 5];

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

int query(int target_st, int target_dr, int st, int dr, int poz)
{
    int s = 0;
    int mid = (st + dr) / 2;
    if (st >= target_st && dr <= target_dr)
    {
        return arbint[poz];
    }
    if (target_st <= mid)
    {
        s += query(target_st, target_dr, st, mid, poz * 2);
    }
    if (target_dr > mid)
    {
        s += query(target_st, target_dr, mid + 1, dr, poz * 2 + 1);
    }
    return s;
}

int func(const char* s, ...)
{

}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out" ,"w", stdout);
    int n, m;
    cin >> n >> m;
    int x;
    for (int i = 1; i <= n; ++i)
    {
        cin >> x;
        update(i, x, 1, n, 1);
    }
    int y, z;
    while (m--)
    {
        cin >> x >> y >> z;
        if (!x)
        {
            update(y, -z, 1, n, 1);
        }
        else
        {
            cout << query(y, z, 1, n, 1) << '\n';
        }
    }
    return 0;
}