Cod sursa(job #386305)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 24 ianuarie 2010 16:41:02
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<iostream>
#include<string>

using namespace std;

#define NM 15005
#define FOR(i,a,b)for(int i=(a);i<=(b);++i)
#define lsb(x)(((x)^(x-1))&(x))

int AIB[NM],N,M;

inline void update(int poz,int val)
{
     while(poz<=N)  
     {
       AIB[poz]+=val;
       poz+=lsb(poz);
     }
}

inline int query(int poz)
{
     int ans=0;
     
     while(poz)
     {
       ans+=AIB[poz];
       poz-=lsb(poz);
     }  
     
     return ans;
}

int main()
{
    int val,op,a,b;
    
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    
    scanf("%d %d",&N,&M);
    
    FOR(i,1,N)
    {
      scanf("%d",&val);
      update(i,val);
    }
    
    FOR(i,1,M)
    {
      scanf("%d %d %d",&op,&a,&b);
      
      if(op) printf("%d\n",query(b)-query(a-1));
      else update(a,-b);
    }
    
    return 0;
}