Cod sursa(job #3244810)

Utilizator seby1337Goran Sebastian-Alexandru seby1337 Data 26 septembrie 2024 17:14:54
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;

const string file = "datorii";
ifstream fin(file+".in");
ofstream fout(file+".out");

const int dim = 15001;
int n, m, i, A[2*dim], tip, a, b, rez[4*dim];

void update(int nod)
{
    while (nod != 0)
    {
        rez[nod] = rez[nod*2]+rez[nod*2+1];
        nod /= 2;
    }
}

int query(int nod, int st, int dr, int qst, int qdr)
{
    if (qst <= st && dr <= qdr)
        return rez[nod];
    int mij = (st+dr)/2, sum = 0;
    if (qst <= mij)
        sum += query(nod*2, st, mij, qst, qdr);
    if (mij+1 <= qdr)
        sum += query(nod*2+1, mij+1, dr, qst, qdr);
    return sum;
}

int main()
{
    fin >> n >> m;
    for (i = 1; i <= n; i++)
        fin >> A[i];
    int p = 0;
    while ((1<<p) < n)
        p++;
    n = (1<<p);
    for (i = 1; i <= n; i++)
    {
        rez[i+n-1] = A[i];
        update((i+n-1)/2);
    }
    while (m--)
    {
        fin >> tip >> a >> b;
        if (!tip)
        {
            rez[a+n-1] -= b;
            update((a+n-1)/2);
        }
        else
        {
            if (a > b)
                swap(a, b);
            fout << query(1, 1, n, a, b) << '\n';
        }
    }
    return 0;
}