Cod sursa(job #245653)

Utilizator EstiarteManuel Esanu Estiarte Data 18 ianuarie 2009 14:32:12
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
int n,c[15001];
long int m;
FILE *f=fopen("datorii.in","rt");
FILE *g=fopen("datorii.out","wt");
void adauga(int poz,int val)
{
 int i,nr;
 while(poz<=n)
 {
	c[poz]=c[poz]+val;
	i=poz;nr=1;
	while(!(i&1))
	{
	 i=i>>1;
	 nr=nr<<1;
	}
	poz=poz+nr;
 }
}
int suma(int poz)
{
 int i,s,nr;
 s=0;
 while(poz>0)
 {
	i=poz;nr=1;
	s=s+c[poz];
	while(!(i&1))
	{
	 i=i>>1;
	 nr=nr<<1;
	}
	poz=poz-nr;
 }
 return s;
}
void citire()
{
 int i,a;
 fscanf(f,"%d",&n);
 fscanf(f,"%ld",&m);
 for(i=1;i<=n;i++) c[i]=0;
 for(i=1;i<=n;i++)
 {
	fscanf(f,"%d",&a);
	adauga(i,a);
 }
}
void solutie()
{
 long int i;
 int st,dr,poz,val;
 int op;
 for(i=1;i<=m;i++)
 {
	 fscanf(f,"%d",&op);
	 if(op==0)
	 {
		fscanf(f,"%d",&poz);
		fscanf(f,"%d",&val);
		val=-val;
		adauga(poz,val);
	 }
	 if(op==1)
	 {
		fscanf(f,"%d",&st);
		fscanf(f,"%d",&dr);
		fprintf(g,"%d\n",suma(dr)-suma(st-1));
	 }
 }
}
int main()
{
 citire();
 solutie();
 return 0;
}