Cod sursa(job #833378)

Utilizator marialivia16Chiorean Maria Livia marialivia16 Data 12 decembrie 2012 15:33:25
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<cstdlib>
#include<cstdio>
FILE *f=fopen("datorii.in","r"),*g=fopen("datorii.out","w");
int n,m,arb[400000],a,b,index,val;
void update(int nod,int st,int dr)
{
     if (st==dr) 
     {
                 arb[nod]+=val;
                 return;    
     }
    
    int mij=(st+dr)/2;
 
    if (index<=mij)
       update(nod*2,st,mij);
    else
        update(nod*2+1,mij+1,dr);
 
    arb[nod]=arb[nod*2]+arb[nod*2+1];
}
 
int query(int nod,int st,int dr)
{
    if (a<=st  && b>=dr)
       return arb[nod];

    int s=0,mij=(st+dr)/2;
    if (a <= mij) 
       s+=query(nod*2,st,mij);
    if (mij < b) 
       s+=query(nod*2+1,mij+1,dr);        
    return s;
}
 
int main()
{
    int i,op,x;
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
                     fscanf(f,"%d",&x);
                     index=i;val=x;
                     update(1,1,n);
    }

    for(i=1;i<=m;i++)
    {
                     fscanf(f,"%d%d%d",&op,&a,&b);
                     if (op==1)
                     {
                        index=a;val=b;
                        op=query(1,1,n);
                        fprintf(g,"%d\n",op);
                     }
                     else 
                     {
                          index=a;val=-b;
                          update(1,1,n);
                     }
    }
    fclose(f);
    fclose(g);
    return 0;
}