Cod sursa(job #291428)

Utilizator otilia_sOtilia Stretcu otilia_s Data 29 martie 2009 20:36:39
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 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;
}