Cod sursa(job #93854)

Utilizator frEak-Calin Paul frEak- Data 20 octombrie 2007 14:43:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
//melc.
#include<stdio.h>
#include<stdlib.h>
int c[15001],a[15001];
int n,m,x,y,z;
void creaza()
{
    int aux;
    for (int i=1;i<=n;i++)
        for (int j=(i-((i^(i-1))&i))+1;j<=i;j++)
            c[i]+=a[j];
}

void adauga(int f,int g)
{
	a[f]-=g;
	while (f<=n)
	{
		c[f]-=g;
		f=f+((f^(f-1))&f);
	}
}
int suma(int f, int g)
{
	int sumi;
	if (f!=1) return suma(1,g)-suma(1,f-1);
	else
	{	
		sumi=0;
		while (g>0)
		{
			sumi+=c[g];
			g=g-((g^(g-1))&g);
		}
		return sumi;
	}
}
void citire()
{
    freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for (int i=1;i<=n-1;i++)
        scanf("%d",&a[i]);
    scanf("%d\n",&a[n]);
	creaza();
    for (int i=1;i<=m;i++)
    {
        scanf("%d %d %d\n",&x,&y,&z);
        if (x==0) adauga(y,z);
        else printf("%d\n",suma(y,z));
    }
    fclose(stdin);
	fclose(stdout);
}


int main()
{
    citire();
    return 0;
}