Cod sursa(job #292361)

Utilizator lexu93Todor Alex lexu93 Data 31 martie 2009 08:23:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>      
#include <string.h>      
#define NMAX 15006      
int v[4*NMAX+10],a,b,poz,val;      
int S;      
     
void scade(int nod, int st, int dr)      
{      
 if (st==dr) v[nod]-=val;      
    else     
     {      
      int mij=(st+dr)/2;      
      if (poz<=mij) scade(2*nod,st,mij);      
     else scade(2*nod+1,mij+1,dr);      
      v[nod]-=val;      
     }      
}      
     
void suma(int nod, int st, int dr)      
{      
 if (a<=st && b>=dr) S+=v[nod];      
    else     
     {      
      int mij=(st+dr)/2;      
      if (a<=mij) suma(2*nod,st,mij);      
      if (b>mij) suma(2*nod+1,mij+1,dr);      
     }      
}      
     
int main()      
{      
 FILE *fin=fopen("datorii.in","r");      
 FILE *fout=fopen("datorii.out","w");      
 int n,ev,tip,i;      
 fscanf(fin,"%d %d",&n,&ev);      
 memset(v,0,sizeof(v));      
 for (i=1;i<=n;i++)      
  {      
   fscanf(fin,"%d",&val);      
   poz=i; val=-val;      
   scade(1,1,n);      
  }      
 while (ev--)      
  {      
   fscanf(fin,"%d %d %d",&tip,&a,&b);      
   if (tip==0)      
      {      
       poz=a; val=b;      
       scade(1,1,n);      
      }      
     else     
      {      
       S=0;      
       suma(1,1,n);      
       fprintf(fout,"%d\n",S);      
      }      
  }      
 return 0;      
}