Cod sursa(job #2187355)

Utilizator ARobertAntohi Robert ARobert Data 26 martie 2018 13:54:47
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

int v[15001], arb[60005], n,m,a,b,c;

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

int query(int nod, int a, int b, int l, int r)
{
    if (a<=l&&r<=b)
        return arb[nod];
    int mid = (l+r)/2;
    int ans=0;
    if (a<=mid)
        ans+=query(2*nod, a, b, l, mid);
    if (b>=mid+1)
        ans+=query(2*nod+1, a, b , mid+1, r);
    return ans;
}

int main()
{
    fin>>n>>m;
    for (int i=1;i<=n;i++)
    {
        fin>>v[i];
        update(1, i, v[i], 1,n);
    }
    for (int i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        if (a==0)
            update(1,b,-c,1,n);
        else fout<<query(1,b,c,1,n)<<'\n';
    }
    return 0;
}