Cod sursa(job #129492)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 29 ianuarie 2008 16:46:43
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
#define Nmax 15002

long n,m,i,ind,op,p,q,c[Nmax],a,s,poz;

int main(){
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    
    scanf("%ld %ld",&n,&m);
    for (i=1;i<=n;i++){
        scanf("%ld",&a);
        ind=i;
        poz=0;
        while (ind<=n){
              c[ind]+=a;
              while((long)(ind&(1<<poz))==0)poz++;
              ind+=(1<<poz);
              poz++;
        }
    }
    
    for (i=1;i<=m;i++){
        scanf("%ld %ld %ld",&op,&p,&q);
        if (op==0){
           ind=p;
           poz=0;
           while (ind<=n){
                 c[ind]-=q;
                 while((long)(ind&(1<<poz))==0)poz++;
                 ind+=(1<<poz);
                 poz++;
           }
        }
        else{
             s=0;
             ind=q;
             poz=0;
             while (ind){
                   s+=c[ind];
                   while((long)(ind&(1<<poz))==0)poz++;
                   ind-=(1<<poz);
                   poz++;
             }
             ind=p-1;             
             poz=0;
             while (ind){
                   s-=c[ind];
                   while((long)(ind&(1<<poz))==0)poz++;
                   ind-=(1<<poz);
                   poz++;
             }
             printf("%ld\n",s);
        }
    }
    
    return 0;
}