Cod sursa(job #1397688)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 23 martie 2015 18:06:28
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int i,k,v[50005],j,a,b,c,x,y,d,val,n,m,maxi,in[15001],suma;
void update(int st,int dr,int nod)
{
    if(st==dr)
    {
        v[nod]-=b;
        return;
    }
    int mij=(st+dr)/2;
    if(a>mij)
        update(mij+1,dr,(nod<<1)+1);
    else
        update(st,mij,nod<<1);
    v[nod]=v[nod<<1]+v[(nod<<1)+1];
}
void build(int st,int dr,int nod)
{
    if(st==dr)
    {
        v[nod]=in[st];
        return;
    }
    int mij=(st+dr)/2;
    build(st,mij,nod<<1);
    build(mij+1,dr,nod*2+1);
    v[nod]=v[nod*2]+v[nod*2+1];

}
void cherry(int st,int dr,int nod)
{
    if(st>=a&&dr<=b)
    {
        suma+=v[nod];
        return;
    }
    int mij=(st+dr)/2;
    cherry(st,mij,nod<<1);
    cherry(mij+1,dr,nod*2+1);

}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>in[i];
    build(1,n,1);
    for(i=1;i<=m;i++)
    {
        int p;
        fin>>p>>a>>b;
        if( p == 0 )
        {
            val=b;
            update(1,n,1);
        }
        else
        {
             suma=0;
             cherry(1,n,1);
             fout<<suma<<"\n";
        }
    }
    return 0;
}