Cod sursa(job #356490)

Utilizator SheepBOYFelix Liviu SheepBOY Data 14 octombrie 2009 22:07:58
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<stdio.h>
#define NMAX 100100
int n,m,arb[NMAX],pos[NMAX];
int s[15001];
int x,y;
void Generate_arb(int,int,int);
void Update(int,int,int,int,int);
void Gen(int,int,int);
int Question(int,int,int);
int main()
{
    int i,aux;
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
	{
		scanf("%d",&aux);
		if(i>1)
             s[i]+=s[i-1]+aux;
		else
            s[i]=aux;
	}
	Generate_arb(1,n,1);
	/*for(i=1;i<=n;++i)
    {
                     scanf("%d%d%d",&aux,&x,&y);
                     if(aux)
                            printf("%d\n",Question(1,n,1));
                     else
                         Update(y,x,1,n,1);
    }
	return 0;*/
}
void Generate_arb(int st,int dr,int nd)
{
    bool exit=0;
    if(st==dr)
	{
        exit=1;
		pos[st]=nd;
	}
	if(st>1)
        arb[nd]=s[dr]-s[st-1];     
    else
        arb[nd]=s[dr];
    if(exit)
        return;
    int m=(st+dr)>>1;
        Generate_arb(st,m,nd<<1);
        Generate_arb(m+1,dr,(nd<<1)+1);        
}
int Question(int st,int dr,int nod)
{
    if(y<st||x>dr)
        return 0;
    if(st==dr)
        return arb[nod];
    int m=(st+dr)>>1;
    int a,b;
    a=Question(st,m,nod<<1);
    b=Question(m+1,dr,(nod<<1)+1);
    return a+b;
}
void Update(int val,int pover,int st,int dr,int nod)
{
    bool exit=0;
	arb[nod]-=val;
    if(st==dr)
		exit=1;
	if(exit)
        return;
    int m=(st+dr)>>1;
    if(pover<=m)
        Update(val,pover,st,m,nod<<1);
    else
        Update(val,pover,m+1,dr,(nod<<1)+1);
}