Cod sursa(job #3294991)

Utilizator alex.andrei.stoican@gmail.comStoican Alexandru [email protected] Data 1 mai 2025 10:53:49
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
void actualizare(int poz, int val, vector <int> &aib)
{
    int n = (int)aib.size() - 1;
    while (poz <= n)
    {
        aib[poz] += val;
        int p2 = poz & (-poz);
        poz += p2;
    }
}

int interogare(int poz, vector <int> &aib)
{
    int sum = 0;
    while (poz != 0)
    {
        sum += aib[poz];
        int p2 = poz & (-poz);
        poz -= p2;
    }
    return sum;
}
int main()
{
    int n, m, elem, i, tip;
    int poz, val, st, dr;
    in >> n >> m;
    vector <int> aib(n + 1, 0);
    for(i = 1; i <= n; i++)
    {
        in >> elem;
        actualizare(i, elem, aib);
    }
    for(i = 1; i <= m; i++)
    {
        in >> tip;
        if(tip==0)
        {
            in >> poz >> val;
            val=val*(-1);
            actualizare(poz, val, aib);
        }
        else
        {
            in >> st >> dr;
            out << interogare(dr, aib) - interogare(st - 1, aib) << "\n";
        }
    }
    return 0;
}