Cod sursa(job #1954829)

Utilizator andr3i_kaabAndrei Ciineanu andr3i_kaab Data 5 aprilie 2017 17:53:04
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,q,arbi[15000*4],x,y,c=1,poz,val;

void update(int node, int st, int dr, int poz, int val)
{int med;
    if (st==dr)
    {
        arbi[node]-=val;
        return;
    }
    med=(st+dr)/2;
    if (med>=poz)
        update(node*2,st,med,poz,val);
    else
        update(node*2+1,med+1,dr,poz,val);
    arbi[node]=arbi[node*2]+arbi[node*2+1];
}

int query(int node, int st, int dr, int x, int y)
{int med=(st+dr)/2,r1=0,r2=0;
    if (st>=x && dr<=y)
{
    return(arbi[node]);
}
    if (med>=x) r1=query(node*2,st,med,x,y);
    if (med<y) r2=query(node*2+1,med+1,dr,x,y);
    return (r1+r2);
}
int main()
{int i,nr;
f>>n>>q;
for (i=1;i<=n;i++)
{
    f>>nr;
    update(1,1,n,i,-nr);
}
for(i=1;i<=q;i++)
{
    f>>c;
    if (c==0)
    {
        f>>poz>>val;
        update(1,1,n,poz,val);
    }
    else
    {
        f>>x>>y;
        g<<query(1,1,n,x,y)<<"\n";
    }
}
    return 0;
}