Cod sursa(job #2400784)

Utilizator Teo_1101Mititelu Teodor Teo_1101 Data 9 aprilie 2019 09:17:05
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

const int NMAX = 100003;

int tree[NMAX];
int a[NMAX];

int N, Q;
int task, x, y;

void Update(int pos, int val)
{
    while(pos <= N)
    {
        tree[pos] -= val;
        pos += (pos & -pos);
    }
}

int Query(int pos)
{
    int sum = 0;

    while( pos > 0)
    {
        sum += tree[pos];
        pos -= (pos & - pos);
    }

    return sum;
}
void Do()
{
    fin >> N >> Q;

    for(int i = 1; i <= N; ++i)
    {
        fin >> a[i];
        Update(i, -a[i]);
    }

    for(int q = 1; q <= Q; ++q)
    {
        fin >> task >> x >> y;

        if(task == 0) Update(x, y);
        else fout << Query( y ) - Query( x - 1 ) << '\n';
    }
}
int main()
{
    Do();
    return 0;
}