Cod sursa(job #2999610)

Utilizator Emmy432622Rotariu Emanuel Emmy432622 Data 11 martie 2023 11:03:48
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax=1e5+5;

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

int V[4*nmax];

void update(int nod, int l, int r, int pos, int val)
{
    if(l==r)V[nod]+=val;
    else
    {
        int mid=(l+r)/2;
        if(pos<=mid)
            update(2*nod,l,mid,pos,val);
        else
            update(2*nod+1,mid+1,r,pos,val);
        V[nod]=V[2*nod]+V[2*nod+1];
    }
}

int query(int nod, int l, int r, int x, int y)
{
    int ans_l=0, ans_r=0;

    if(l>=x && r<=y)
        return V[nod];
    else
    {
        int mid=(l+r)/2;
        if(mid>=x)
            ans_l=query(2*nod,l,mid,x,y);
        if(mid<y)
            ans_r=query(2*nod+1,mid+1,r,x,y);
        return ans_l+ans_r;
    }
}

int main()
{
    int n,q;
    fin >> n >> q;
    for(int i=1 ; i<=n ; ++i)
    {
        int x;
        fin >> x;
        update(1,1,n,i,x);
    }

    for(int i=1 ; i<=q ; ++i)
    {
        int t,x,y;
        fin >> t >> x >> y;

        if(t==0)
             update(1,1,n,x,-y);
        else
            fout << query(1,1,n,x,y) << '\n';
    }

    return 0;
}