Cod sursa(job #2690700)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 25 decembrie 2020 13:07:12
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <cstdio>

using namespace std;

const int NMAX = 15000;

int n, m;
int aint[2 * NMAX + 5];

void build() {
  for(int i = n - 1; i; i--)
    aint[i] = aint[i << 1] + aint[i << 1 | 1];
}

void update(int poz, int delta) {
  aint[poz += n - 1] += delta;
  for(poz >>= 1; poz; poz >>= 1)
    aint[poz] = aint[poz << 1] + aint[poz << 1 | 1];
}

int query(int st, int dr) {
  int ans = 0;
  for(st += n - 1, dr += n - 1; st <= dr; st >>= 1, dr >>= 1) {
    if(st & 1)
      ans += aint[st++];
    if(!(dr & 1))
      ans += aint[dr--];
  }
  return ans;
}

int main() {
  freopen("datorii.in", "r", stdin);
  freopen("datorii.out", "w", stdout);

  scanf("%d %d", &n, &m);
  for(int i = 0; i < n; i++)
    scanf("%d", &aint[n + i]);
  build();

  for(int i = 0; i < m; i++) {
    int tip, a, b;

    scanf("%d %d %d", &tip, &a, &b);
    if(tip)
      printf("%d\n", query(a, b));
    else
      update(a, -b);
  }

  return 0;
}