Cod sursa(job #71291)

Utilizator gigi_becaliGigi Becali gigi_becali Data 9 iulie 2007 23:28:32
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
//(c) author Mircea Dima
// Arbori Indexati Binar
// datorii.cpp
#include <stdio.h>
#define maxn 15001
#define bit(x) ( (x) & (((x)-1)^x))
int s[maxn], m, n;

void update(int x, int val, int sgn)
{
  for(; x<=n ;x+=bit(x)) s[x]+=sgn*val;
}

int query(int x)
{
  int sum=0;
  for(; x>0 ;x-=bit(x))sum+=s[x];
  return sum;
}

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

int main()
{
  citire();
  return 0;
}