Cod sursa(job #3131447)

Utilizator SorinBossuMarian Sorin SorinBossu Data 20 mai 2023 11:29:45
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");

constexpr int nmax = 15001;
int n;
int aib[nmax];

void build() {
  for (int i = 1; i <= n; ++i) {
    int p = i + (i & -i);
    if (p <= n)
      aib[p] += aib[i];
  }
}

int sum(int v) {
  int r = 0;
  while (v)
    r += aib[v], v -= v & -v;
  return r;
}

void update(int poz, int val) {
  while (poz <= n) {
    aib[poz] -= val;
    poz += poz & -poz;
  }
}
int sum(int l, int r) { return sum(r) - sum(l - 1); }

int main() {
  int m;
  in >> n >> m;
  for (int i = 1; i <= n; ++i)
    in >> aib[i];
  build();
  for (int i = 1; i <= m; ++i) {
    int op, s, r;
    in >> op >> s >> r;
    if (op == 0)
      update(s, r);
    else
      out << sum(s, r) << "\n";
  }
  return 0;
}