Cod sursa(job #292263)

Utilizator katamashCatalin Tamas katamash Data 30 martie 2009 22:08:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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;   
}