Cod sursa(job #2201336)

Utilizator lucaperjuLuca Perju Verzotti lucaperju Data 4 mai 2018 12:20:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;
ifstream in ("datorii.in");
ofstream out ("datorii.out");
int arb[400005];
void update (int a, int b, int nod, int poz, int val)
{
    if(a==b)
        arb[nod]+=val;
    else
    {
        int mid=(a+b)/2;
        if(poz<=mid)
            update(a,mid,nod*2,poz,val);
        else
            update(mid+1,b,nod*2+1,poz,val);
        arb[nod]=arb[nod*2]+arb[nod*2+1];
    }
}
int query (int a, int b, int nod, int st, int dr)
{
    int r1=0,r2=0;
    if(st<=a && dr>=b)
        return arb[nod];
    int mid=(a+b)/2;
    if(st<=mid)
        r1=query(a,mid,nod*2,st,dr);
    if(mid<dr)
        r2=query(mid+1,b,nod*2+1,st,dr);
    return r1+r2;
}
int main()
{
    int n,m,i,a,b,c;
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        in>>a;
        update(1,n,1,i,a);
    }
    for(i=1;i<=m;i++)
    {
        in>>a>>b>>c;
        if(a==0)
            update(1,n,1,b,-c);
        else
            out<<query(1,n,1,b,c)<<'\n';
    }
    return 0;
}