Cod sursa(job #2762137)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 5 iulie 2021 19:08:32
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>

using namespace std;

const int Nmax = 15000;
int aib[Nmax + 1], a[Nmax + 1];

void build(int k, int x, int n)
{
    while (k <= n)
    {
        aib[k] += x;
        k += (k & -k);
    }
}

void upd(int k, int x, int n)
{
    while (k <= n)
    {
        aib[k] -= x;
        k += (k & -k);
    }
}

int qry(int k)
{
    int ans = 0;
    while (k >= 1)
    {
        ans += aib[k];
        k -= (k & -k);
    }
    return ans;
}

int main()
{
    ifstream fin("datorii.in");
    ofstream fout("datorii.out");
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        fin >> a[i];
        build(i, a[i], n);
    }
    while (m--)
    {
        int t, p, q;
        fin >> t >> p >> q;
        if (t == 0)
        {
            upd(p, q, n);
        }
        else
        {
            fout << qry(q) - qry(p - 1) << "\n";
        }
    }
    return 0;
}