Cod sursa(job #1944950)

Utilizator SkiryFarauanu Ionut Skiry Data 29 martie 2017 12:17:12
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int arb[1<<19],nod,st,dr,a,b,m,n,em,poz,x,i,op;
void actualizare(int nod,int st,int dr,int ok)
{
    if(st>=poz&&dr<=poz)
    {
        if(!ok) arb[nod]=x;
        else arb[nod]-=b;
        return;
    }
    int m=(st+dr)>>1;
    if(poz<=m) actualizare(nod<<1,st,m,ok);
    else actualizare((nod<<1)+1,m+1,dr,ok);
    arb[nod]=arb[nod<<1]+arb[(nod<<1)+1];
}
int interogare(int nod,int st,int dr)
{
    if(st>=a&&dr<=b) return arb[nod];
    int x1=0,x2=0,m=(st+dr)>>1;
    if(a<=m) x1=interogare(nod<<1,st,m);
    if(b>m) x2=interogare((nod<<1)+1,m+1,dr);
    return x1+x2;
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        poz=i;
        actualizare(1,1,n,0);
    }
    for(i=1;i<=m;i++)
    {
        f>>op>>a>>b;
        if(!op)
        {
            poz=a;
            x=b;
            actualizare(1,1,n,1);
        }
        else g<<interogare(1,1,n)<<'\n';
    }
    return 0;
}