Cod sursa(job #73249)

Utilizator skyelHighScore skyel Data 17 iulie 2007 16:58:46
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
/* Problema: 007 Datorii */
/* Autor: Ghitulete Razvan Alin - Craiova */

#include <stdio.h>
#define in "datorii.in"
#define out "datorii.out"
#define Nmax 15005
#define Mmax 100003
int n,a[Nmax];
long m,c[Nmax],s2,s1;


int main()
    {
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    int i,tip_operatie,t,v,j,x,y,poz;      
	 scanf("%d %ld",&n,&m);

    for (i=1;i<=n;++i)
       {
       scanf("%d",&a[i]);
       poz=0;
       j=i;
       while (j <= n)
             {
             c[j]+=a[i];
             while ( (j& (1<<poz)) == 0 )
                   poz++;                       
             j+=(1<<poz);
             poz++;
             }        
       }
    for (i=1;i<=m;++i)
        {
        scanf("%d",&tip_operatie);
        if (tip_operatie == 0)
           {
           scanf ("%d %d",&t,&v);
           poz=0;
           
           while (t <= n)
                 {
                 c[t]-=v;
           
                 while ( (t & (1<<poz)) == 0)
                       {
                       poz++;
                       
                       }
                 t+=(1<<poz);       
                 poz++;
                 }        
           }
        else
            {
            scanf("%d %d",&y,&x);
            s1=s2=0;
            y--;
            poz=0;
            while (y)
                  {
                  s1+=c[y];
                  while ( (y & (1<<poz)) ==0)   
                        poz++;
                   
                  y-=1<<poz;                
                  poz++;
                  }
             poz=0;
             while (x)
                  {
                  s2+=c[x];
                  while ( (x & (1<<poz)) ==0)   
                        poz++;
                  x-=1<<poz;                
                  poz++;
                  }
             
             printf("%ld\n",s2-s1);
            }                                 
        }
    return 0;      
    }