Cod sursa(job #3152600)

Utilizator Oprea_IrinaIrina Oprea Oprea_Irina Data 25 septembrie 2023 20:57:14
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>

using namespace std;

int n, m, a, b, op, numar, found=0;
int aib[100001];

int construct (int nr, int ind);
int update (int ind, int val);
int suma (int right);
int interval (int left, int right);

int main()
{
    ifstream cin ("datorii.in");
    ofstream cout ("datorii.out");

    cin >> n >> m;
    for (int i=1; i<=n; i++)
    {
        cin >> numar;
        aib[i] += numar;
        construct (aib[i], i);
    }
    for (int i=0; i<m; i++)
    {
        found = 0;
        cin >> op;
        if (op == 0)
        {
            cin >> a >> b;
            update (a, b);
        }
        else if (op == 1)
        {
            cin >> a >> b;
            cout << interval (a, b) << endl;
        }
    }
    return 0;
}


int construct (int nr, int ind)
{
    int jnd;
    jnd = ind + (ind & -ind);
    if (jnd <= n)
    {
        aib[jnd] += aib[ind];
    }
    return 0;
}

int update (int ind, int val)
{
    while (ind <= n)
    {
        aib[ind] -= val;
        ind += (ind & -ind);
    }
    return 0;
}

int suma (int right)
{
    int sum=0;
    while (right > 0)
    {
        sum += aib[right];
        right -= (right & -right);
    }
    return sum;
}

int interval (int left, int right)
{
    return suma(right) - suma(left - 1);
}