Cod sursa(job #2186541)

Utilizator mateicosCostescu Matei mateicos Data 25 martie 2018 18:32:28
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

using namespace std;

int v[100005], s[100005], n;

void up(int i, int k){
  for(;i <= n;i += (i&-i))
    v[i] -= k;
}

long long sum(long long a){
  long long s;
  s = 0;
  for(;a > 0;a -= (a&-a)){
    s += v[a];
  }
  return s;
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    int q, m, i, p, a, b;
    scanf("%d%d", &n, &m);
    for(i = 1;i <= n;i++){
      scanf("%d", &v[i]);
      s[i] = s[i - 1] + v[i];
      v[i] = s[i] - s[i - (i&-i)];
    }
    for(i = 0;i < m;i++){
      scanf("%d", &p);
      if(p == 0){
        scanf("%d%d", &a, &b);
        up(a, b);
      }
      else
      if(p == 1){
        scanf("%d%d", &a, &b);
        printf("%d\n", sum(b) - sum(a - 1));
      }
    }
    return 0;
}