Cod sursa(job #335399)

Utilizator mlazariLazari Mihai mlazari Data 29 iulie 2009 20:41:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>

#define NMAX 15003

int n,m,i,cod,x,y;
int s[NMAX];

int nz(int val) {
  int k=0;
  while(val%2==0) {
    k++;
    val>>=1;
  }
  return k;
}

void add(int poz,int val) {
  while(poz<=n) {
    s[poz]+=val;
    poz+=1<<nz(poz);
  }
}

int sum(int poz) {
  int suma=0;
  while(poz) {
    suma+=s[poz];
    poz-=1<<nz(poz);
  }
  return suma;
}

int main() {
  freopen("datorii.in","r",stdin);
  freopen("datorii.out","w",stdout);
  scanf("%d %d",&n,&m);
  for(i=1;i<=n;i++) {
    scanf("%d",&x);
    add(i,x);
  }
  while(m--) {
    scanf("%d %d %d",&cod,&x,&y);
    if(cod) printf("%d\n",sum(y)-sum(x-1));
    else add(x,-y);
  }
  return 0;
}