Cod sursa(job #2182820)

Utilizator PetyAlexandru Peticaru Pety Data 22 martie 2018 17:30:38
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, aib[100001], v[100001], cer, a, b, sp[100001];

void update (int poz, int val) {
  for(; poz <= n; poz += poz&-poz)
    aib[poz] -= val;
}
int query (int poz) {
  int s = 0;
  for (; poz > 0; poz -= poz&-poz)
    s += aib[poz];
  return s;
}


int main()
{
  fin >> n >> m;
  for (int i = 1; i <= n; i++) {
    fin >> v[i];
    sp[i]= sp[i - 1] + v[i];
    aib[i] = sp[i] - sp[i - (i&-i)];  
  }
  for (int i = 1; i <= m; i++) {
    fin >> cer;
    if (cer == 0) {
      fin >> a >> b;
      update(a, b);    
    }
    if (cer == 1) {
      fin >> a >> b;
      if (a > b)
        swap(a, b); 
      fout << query(b) - query(a - 1) << "\n";
    }  
  }
  return 0;
}