Cod sursa(job #329141)

Utilizator iulia609fara nume iulia609 Data 4 iulie 2009 23:07:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>
#define zero(poz) ((poz^(poz-1))&poz)
#define dim 15001
using namespace std;

int a[dim],poz,val,n; 

void update(int poz, int val)
{ 
	while(poz <= n) 
		{ a[poz] -= val;
		  poz += zero(poz);
		}
}


int query(int poz)
{ int s = 0;
	
	while(poz > 0)
		{ s += a[poz];
		  poz -= zero(poz);
		}
	return s;
}


int main()
{ int i,x,y,nr,m;
 
	FILE *f = fopen("datorii.in", "r");
	FILE *g = fopen("datorii.out", "w");
  
	fscanf(f, "%d%d", &n, &m);
	
	for(i = 1; i <= n; i++)
		{fscanf(f, "%d", &x);
		 update(i, -x);
		}
		
	for( i = 1; i <= m; i++ )
		{
			fscanf(f, "%d%d%d", &nr, &x, &y);
			
			if(!nr) update(x, y);
			  else fprintf(g, "%d\n", query(y) - query(x-1));
				
		}  
  
  
	fclose(f);
	fclose(g);
	return 0;
}