Cod sursa(job #1255942)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 5 noiembrie 2014 16:49:46
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m,k,i,arbore[1000],v[1000],l,r,t,tip;
void plata(int st,int dr,int p)
{
    if(st==dr)
    {
        arbore[p]=arbore[p]-r;
        return ;
    }
    else
    {
        int mij=(st+dr)/2;
        if(mij+1<=l)
            plata(mij+1,dr,p*2+1);
        else
            plata(st,mij,p*2);
    }
    arbore[p]=arbore[p*2]+arbore[p*2+1];
}
void suma(int st,int dr,int p)
{
    if(l<=st && dr<=r)
        k=k+arbore[p];
    else
    {
        int mij=(st+dr)/2;
        if(mij+1<=r)
            suma(mij+1,dr,p*2+1);
        if(mij>=l)
            suma(st,mij,p*2);
    }
}
void prima_umplere(int st,int dr,int p)
{
    if(st==dr)
    {
        arbore[p]=v[k];
        k++;
    }
    else
    {
        int mij=(st+dr)/2;
        prima_umplere(st,mij,p*2);
        prima_umplere(mij+1,dr,p*2+1);
        arbore[p]=arbore[p*2]+arbore[p*2+1];
    }
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    k=1;
    prima_umplere(1,n,1);
    for(i=1;i<=m;i++)
    {
        fin>>tip>>l>>r;
        if(tip)
        {
            k=0;
            suma(1,n,1);
            fout<<k<<"\n";
        }
        else
            plata(1,n,1);
    }
    return 0;
}