Cod sursa(job #494893)

Utilizator costyv87Vlad Costin costyv87 Data 23 octombrie 2010 12:10:46
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 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 (m<=pos)
            add(nod*2,st,m,pos,val);
        else
            add(nod*2+1,m+1,dr,pos,val);
        }
}

long 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,st,mij,aa,bb);
        if (bb>mij)
            ask(nod,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;
}