Cod sursa(job #156876)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 12 martie 2008 19:39:01
Problema Datorii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
# include <stdio.h>

# define nmax 15001
# define FIN "datorii.in"
# define FOUT "datorii.out"

int n,m,i,a,b,c,H[4*nmax],x,rez;

void update(int c,int x,int y,int poz, int val, int t)
{
 int mij;
 if (x==y)
  if (t==0) H[c]=val;
       else H[c]-=val;
   else
     {
      mij=(x+y) >> 1;
      if (poz<=mij) update(c << 1,x,mij,poz,val,t);
               else update(c << 1 | 1,mij+1,y,poz,val,t);
      H[c]=H[c << 1]+H[c << 1 | 1];
     }
}

void query(int c,int li,int lf)
{
 int mij;
 if (a<=li && lf<=b) 
   {
    rez+=H[c];
    return;
   }
 mij=(li+lf) >> 1;
 if (a<=mij) query(c << 1,li,mij);
 if (b>mij) query(c << 1 | 1,mij+1,lf);
}

int main()
{
 freopen(FIN,"r",stdin);
 freopen(FOUT,"w",stdout);
 scanf("%d %d",&n,&m);
 for (i=1; i<=n; i++)
   {
    scanf("%d",&x);
    update(1,1,n,i,x,0);
   }
 for (i=1; i<=m; i++)
   {
    scanf("%d%d%d",&c,&a,&b);
    if (c==0) update(1,1,n,a,b,1);
     else
       {
        rez=0;
        query(1,1,n);
        printf("%d\n",rez);
       }
   }
 return 0;
}