Cod sursa(job #93855)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 20 octombrie 2007 14:44:45
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>

int n,m,w[15002],a,b,q,u[15002];

long aib(int k)
{
    long s=0;
    while (k>0)
    {
	s+=w[k];
	k=k-((k^(k-1))&k);
    }
    return s;
}

void aib2()
{
    long r,e;
    r=aib(b-1);
    e=aib(q);
    e-=r;
    printf("%ld\n",e);
}

void stergere()
{
int j;
w[b]-=q;
j=b;
while (j+((j^(j-1))&j)<=n)
      {
      j+=(j^(j-1))&j;
      w[j]-=q;
      }
}

void citire()
{
    freopen("datorii.in","r",stdin);
    scanf("%d%d", &n, &m);
    int i,t,j;
    for (i=1; i<=n; i++)
	{
	scanf("%d", &t);
	w[i]+=t;
	j=i;
	while (j+((j^(j-1))&j)<=n)
	      {
	      j+=(j^(j-1))&j;
	      w[j]+=t;
	      }
	}
    for (i=1; i<=m; i++)
    {
	scanf("%d%d%d",&a,&b,&q);
	if (a==0)
	    //w[b]-=q;
	    stergere();
	else aib2();
    }
    fclose(stdin);
}

int main()
{
    freopen("datorii.out","w",stdout);
    citire();
    fclose(stdout);
    return 0;
}