Cod sursa(job #494894)

Utilizator costyv87Vlad Costin costyv87 Data 23 octombrie 2010 12:16:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
FILE *f,*g;
int v[50000];
void add(int nod,int st, int dr, int pos , int val)
{
    int m;
    v[nod]+=val;
    if (st!=dr) {
        m=(st+dr)/2;
        if (pos<=m)
            add(nod*2,st,m,pos,val);
        else
            add(nod*2+1,m+1,dr,pos,val);
	}
}

int sum;
void ask(int nod, int st, int dr, int aa, int bb)
{
    if (aa<=st && dr<=bb)
        sum+=v[nod];
    else {
        int mij=(st+dr)/2;
        if (aa<=mij)
            ask(nod*2,st,mij,aa,bb);
        if (bb>mij)
            ask(nod*2+1,mij+1,dr,aa,bb);
	}
}
int n,m,x,i,bol,s1,s2;
int main() {
    f=fopen("datorii.in","r");
    g=fopen("datorii.out","w");
    fscanf(f,"%d%d",&n,&m);
	for (i=1;i<=n;i++) {
		fscanf(f,"%d",&x);
		add(1,1,n,i,x);
    }
	for (i=1;i<=m;i++) {
		fscanf(f,"%d%d%d",&bol,&s1,&s2);
		if (bol==0)
			add(1,1,n,s1,-s2);
		else
        {
			sum=0;
			ask(1,1,n,s1,s2);
			fprintf(g,"%d\n",sum);
        }
    }
	
	fclose(g);
	return 0;
}