Cod sursa(job #2803647)

Utilizator Andy_ANDYSlatinaru Andrei Alexandru Andy_ANDY Data 20 noiembrie 2021 12:09:03
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>
#define ll long long
//#define int ll
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int n,v[15005],aint[4*15005];

void build(int nod, int st,int dr)
{
    if(st==dr)
    {
        aint[nod] = v[st];
        return ;
    }

    int mij = (st+dr)/2;

    build(nod*2,st,mij);
    build(nod*2+1,mij+1,dr);
    aint[nod] = aint[nod*2] + aint[nod*2+1];
    return ;
}

int query(int nod,int st,int dr ,int l ,int r)
{
    if(l<=st and dr<=r)
    {
        return aint[nod];
    }
    if(r<st or dr<l)
    {
        return 0;
    }

    int mij = (st+dr)/2;

    return query(nod*2,st,mij,l,r)+query(nod*2+1,mij+1,dr,l,r);
}

void update(int nod, int st,int dr, int poz ,int val)
{
    if(st==dr)
    {
        aint[nod] += val;
        return ;
    }

    int mij = (st+dr)/2;

    if(poz<=mij) update(nod*2,st,mij,poz,val);
    else update(nod*2+1,mij+1,dr,poz,val);

    aint[nod] = aint[nod*2]+aint[nod*2+1];
    return ;
}

int main()
{
    //ios_base::sync_with_stdio(0);
    //cin.tie(0);
    int q;
    f>>n;
    f>>q;
    for(int i=1;i<=n;++i)
    {
        f>>v[i];
    }

    build(1,1,n);

    while(q--)
    {
        int op,a,b;
        f>>op>>a>>b;
        if(op==0) update(1,1,n,a,-b);
        else g<<query(1,1,n,a,b)<< '\n';

    }

    return 0;
}