Cod sursa(job #664833)

Utilizator tomaAndrei Toma toma Data 20 ianuarie 2012 22:12:52
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.51 kb
#include<stdio.h>
#define z(a) ((a^(a-1))&a)
int N,M,i,t,x,y,sol,A[15002];
void ADD(int x,int y)
{
	for (int i=x;i<=N;i+=z(i))
		A[i]+=y;
}
int QUERY(int x)
{
	sol=0;
	for (int i=x;i>=1;i-=z(i))
		sol+=A[i];
	return sol;
}
int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&N,&M);
	for (i=1;i<=N;i++){
		scanf("%d",&x);
		ADD(i,x);}
	for (i=1;i<=M;i++){
		scanf("%d%d%d",&t,&x,&y);
		if (t==0) ADD(x,-y);
			else printf("%d\n",QUERY(y)-QUERY(x-1));}
}