Cod sursa(job #3346001)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 11 martie 2026 23:06:34
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
using namespace std;

ofstream cout("datorii.out");
int n, v[15005], m, op, x, y, AIB[15005];
///010001
///1000-1-0
///returneaza cel mai nesemnificativ bit 1
int zeros(int x)
{
    return x & (-x);
}

void add(int poz, int q)
{
    for(int i=poz; i<=n;i += zeros(i))
        AIB[i] += q;
}

///returneaza suma pentru [1, poz]
int Compute(int poz)
{
    int ret = 0;
    for(int i = poz; i>0; i -= zeros(i))
        ret += AIB[i];
    return ret;
}

///suma pentru [a, b]
int Suma(int a, int b)
{
    return Compute(b) - Compute(a-1);
}

void citire()
{
    ifstream cin("datorii.in");
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>v[i];

    for(int i=1;i<=n;i++)
        add(i, v[i]);

    for(int i=1;i<=m;i++)
    {
        cin>>op>>x>>y;
        if(op == 0)
            add(x, -y);
        else
            cout<<Suma(x, y)<<'\n';

    }
}

int main()
{
    citire();

    return 0;
}