Cod sursa(job #2023944)

Utilizator mihailarminia1234Arminia Mihail mihailarminia1234 Data 19 septembrie 2017 18:30:23
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>

#define N 15000
#define nst (nod << 1)
#define ndr (nst + 1)

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int AINT[4 * N + 100], Q, cod, a, b, poz, x, n, suma;

void Update_Element(int nod, int st, int dr, int val)
{
        if(st == dr) AINT[nod] += val;
        else
        {
                int m = (st + dr) / 2;

                if(poz <= m) Update_Element(nst, st, m, val);
                else Update_Element(ndr, m + 1, dr, val);

                AINT[nod] = AINT[nst] + AINT[ndr];
        }
}

void Query(int nod, int st, int dr)
{
        if(a <= st && dr <= b) suma += AINT[nod];
        else
        {
                int m = (st + dr) / 2;

                if(m >= a) Query(nst, st, m);

                if(m + 1 <= b) Query(ndr, m + 1, dr);
        }
}

int main()
{
        f >> n >> Q;
        for(int i = 1; i <= n; ++i)
        {
                f >> x;
                poz = i;
                Update_Element(1, 1, n, x);
        }

        for(int i = 1; i <= Q; ++i)
        {
                f >> cod >> a >> b;
                if(cod == 0)
                {
                        poz = a;
                        Update_Element(1, 1, n, -b);
                }
                else
                {
                        suma = 0;
                        Query(1, 1, n);
                        g << suma << '\n';
                }
        }
        return 0;
}