Cod sursa(job #287393)

Utilizator alisssiaMititelu Andra alisssia Data 24 martie 2009 20:17:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
using namespace std;
#include<cstdio>
int H[100000],n;
 
void update(int poz,int val)
{
    int x=0;
    while(poz<=n)
    {
	H[poz]-=val;
	while(!(poz & (1<<x)))x++;
	poz+=(1<<x);
	x++;
    }
}

int sum(int poz)
{
    int x=0,s=0;
    while(poz>0)
    {
	s+=H[poz];
	while(!(poz & (1<<x))) x++;
	poz-=(1<<x);
	x++;
    }
    return s;
}

int main()

{
    int i,m,k,x,y,a;
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
     scanf("%d%d",&n,&m);
         for(i=1;i<=n;i++)
	 {
	 scanf("%d",&a);
      x=i;
	 update(x,-a);
	}				         
    for(i=0;i<m;i++)
    {
	scanf("%d%d%d",&k,&x,&y);
	if(k) printf("%d\n",sum(y)-sum(x-1));
	else update(x,y);
    }
    return 0;
}