Cod sursa(job #3255511)

Utilizator CatalinPangaleanuCatalin Pangaleanu CatalinPangaleanu Data 10 noiembrie 2024 20:00:21
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <iostream>
#include <fstream>

using namespace std;

int v[15001], aib[15001];

int Positions(int x)
{
    return x^(x-1)&x;
}

void Add(int pos, int x, int n)
{
    for (int i=pos;i<=n;i+=Positions(i))
        aib[i]+=x;
}

int Compute(int pos)
{
    int ans=0;
    for (int i=pos;i>=1;i-= Positions(i))
        ans+=aib[i];
    return ans;
}

int main()
{
    ifstream fin("datorii.in");
    ofstream fout("datorii.out");
    int n, q;
    fin>>n>>q;
    for (int i=1;i<=n;++i)
    {
        fin>>v[i];
        Add(i, v[i], n);
    }
    while (q--)
    {
        int op, a, b;
        fin>>op>>a>>b;
        if (op==0)
            Add(a, -b, n);
        else
            fout<<Compute(b)- Compute(a-1)<<'\n';
    }

    return 0;
}