Cod sursa(job #1199305)

Utilizator c0rn1Goran Cornel c0rn1 Data 18 iunie 2014 19:43:01
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#define Nmax 15005
#define _2lap(x) ((x)&((x)^((x)-1)))

using namespace std;
int n, m, aib[Nmax];

int suma(int p)
{
   int s;
   for (s=0; p>0; p-=_2lap(p))
      s+=aib[p];
   return s;
}

void update(int x, int p)
{
   for (; p<=n; p+=_2lap(p))
      aib[p]+=x;
}

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

   return 0;
}