Cod sursa(job #1807998)

Utilizator andunhillMacarescu Sebastian andunhill Data 17 noiembrie 2016 10:26:33
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int N,M,i,x,zi,op,a,b,sum;
int arb[60001];
void update(int nod, int left,int right,int val)
{   if(left==right)
    {   arb[nod]+=(x*val);
        return;
    }
    else
    {   int mid=(left+right)>>1;
        if(zi<=mid)
            update(2*nod,left,mid,val);
        else
            update(2*nod+1,mid+1,right,val);
    }
    arb[nod]=arb[2*nod]+arb[2*nod+1];
}
void query(int nod, int left, int right)
{   if(a<=left && right<=b)
    {   sum+=arb[nod];
        return;
    }
    else
    {   int mid=(left+right)>>1;
        if(a<=mid)
            query(2*nod,left,mid);
        if(mid<b)
            query(2*nod+1,mid+1,right);
    }
}
int main()
{   f>>N>>M;
    for(i=1;i<=N;i++)
    {   f>>x;
        zi=i;
        update(1,1,N,1);
    }
    for(i=1;i<=M;i++)
    {   f>>op>>a>>b;
        if(!op)
        {   zi=a;
            x=b;
            update(1,1,N,-1);
        }
        else
        {   sum=0;
            query(1,1,N);
            g<<sum<<'\n';
        }
    }
    f.close();
    g.close();
    return 0;
}