Cod sursa(job #641318)

Utilizator ELHoriaHoria Cretescu ELHoria Data 27 noiembrie 2011 21:05:18
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define dim 15001

inline int Minim(int a, int b)
{
	return a < b ? a : b;
}

int N, M, T;
int Arb[dim];
int C, S;

void Update(int poz, int val)
{
     for(C = 0; poz <= N; C++)
     {
           Arb[poz] += val;
           while ( !(poz & (1<<C)) ) C++;
           poz += (1<<C);
     }
}

int Query(int poz)
{
   for(C = 0, S = 0; poz > 0;C++ )
    {
          S += Arb[poz];
          while ( !(poz & (1<<C)) ) C++;
          poz -= (1<<C);
    }
    return S;
}


int main()
{
    memset(Arb,0,sizeof(Arb));
    int K, X, Y;
    
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    
    scanf("%d%d", &N, &M);
    for ( int i = 1; i <= N; i++ )
    {
        scanf("%d", &T);
        Update(i,T);
    }
    
    for ( ; M; M-- )
    {
        scanf("%d%d%d", &K, &X, &Y);
             if (!K)  Update(X,-Y);
             else      
				 printf("%d\n", Query(Y)-Query(X-1));
    
    }
	return 0;
}