Cod sursa(job #1255775)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 5 noiembrie 2014 09:21:10
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 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);
	}
}
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;
}