Cod sursa(job #2496958)

Utilizator serafimalex2001Serafim Alex serafimalex2001 Data 21 noiembrie 2019 21:33:28
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#define NMAX 15009
using namespace std;

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

int tree[2*NMAX];
int n,m;

void Update(int nod, int lf, int rg, int pos, int val)
{
    if(lf == rg)
    {
        tree[nod] += val;
        return;
    }
    int mid = lf + (rg-lf)/2;
    if(pos <= mid)
        Update(nod*2, lf, mid, pos, val);
    else Update(nod*2+1, mid+1, rg, pos, val);
    tree[nod] = tree[nod*2] + tree[nod*2+1];
}

int Query(int nod, int lf, int rg, int L, int R)
{
    if(L<=lf && rg<=R)
        return tree[nod];
    int mid = lf + (rg-lf)/2;
    int sum = 0;
    if(L <= mid)
        sum += Query(nod*2, lf, mid, L ,R);
    if(mid < R)
        sum += Query(nod*2+1, mid+1, rg, L, R);
    return sum;
}

void Do()
{
    int i,j,x,t,a,b;
    fin>>n>>m;
    for(i=1; i<=n; ++i)
    {
        fin>>x;
        Update(1,1,n,i,x);
    }
    for(i=1; i<=m; ++i)
    {
        fin>>t>>a>>b;
        if(t==0)
        {
            Update(1,1,n,a,-b);
        }
        else fout<<Query(1,1,n,a,b)<<"\n";
    }
}

int main()
{
    Do();
    return 0;
}