Cod sursa(job #629787)

Utilizator VladberilaVladutz Vladberila Data 3 noiembrie 2011 23:18:54
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>
#define Nmax 15001
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
int N,M,arb[4*Nmax],x,p,A,B,X,S;
inline int suma(int a,int b)
{
    return a+b; 
}
void update(int nod, int st,int dr)
{
     if(st==dr)
     {
          arb[nod]=x;
          return;     
     } 
     int mij=(st+dr)/2;
     if(p<=mij)
        update(2*nod,st,mij);
     else
        update(2*nod+1,mij+1,dr);
     arb[nod]=suma(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int st,int dr)
{
    if(A<=st && dr<=B)
    {
         return;
    } 
    S+=arb[nod];
    int mij=(st+dr)/2;
    if(A<=mij)
       query(2*nod,st,mij);
    if(mij<B)
       query(2*nod+1,mij+1,dr);
}
void citire()
{
     fscanf(f,"%d%d",&N,&M);
     int i;
     for(i=1;i<=N;i++)
     {
          fscanf(f,"%d",&x);
          p=i;
          update(1,1,N);            
     }
     for(i=1;i<=4*N;i++)
        fprintf(g,"%d ",arb[i]);
     fprintf(g,"\n");
     for(i=1;i<=M;i++)
     {
          fscanf(f,"%d%d%d",&X,&A,&B);
          if(X==0)
          {
               p=A;
               x=arb[p]-B;   
               update(1,1,N);
          }
          else
          {
              S=0;
              query(1,1,N);
              fprintf(g,"%d\n",S);
          }             
     }
     fclose(f);
     fclose(g);
}
int main()
{
    citire();
    return 0;   
}