Cod sursa(job #3001734)

Utilizator StefantimStefan Timisescu Stefantim Data 13 martie 2023 21:16:16
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");


const int NMAX = 100005;
int v[4*NMAX];
int poz, val, start , finish;

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

int afisare(int nod, int st, int dr)
{
    if(start <= st && dr <= finish)
    {
        return v[nod];
    }
    int mij = (st + dr) / 2;
    int s1 = 0, s2 = 0;
    if(start <= mij)
        s1 = afisare(2*nod, st, mij);
    if(mij < finish)
        s2 = afisare(2*nod + 1, mij + 1, dr);
    return s1 + s2;
}
int main()
{
    int n, m, x;
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        fin >> x;
        poz = i;
        val = x;
        update(1,1,n);
    }
    for(int i = 1; i <= m; i++)
    {
        fin >> x >> start >> finish;
        if(x == 0)
        {
            poz = start;
            val = -finish;
            update(1, 1, n);
        }
        else
        if(x == 1)
        {
            fout << afisare(1, 1, n) << "\n";
        }
    }
    return 0;
}