Cod sursa(job #1199329)

Utilizator LurchssLaurentiu Duma Lurchss Data 18 iunie 2014 20:21:13
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

#define max 100005
using namespace std;
int n,m;
int aib[max];
int a[max];
int zero(int x)
{
    return (x xor (x-1)) & x;
}
void update(int x,int i)
{
    for(int j=i;j<=n;)
    {   aib[j]+=x;
        j+=zero(j);
    }
}
int suma(int y);
void citire()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
        {   int x;
            scanf("%d ",&a[i]);
            update(a[i],i);
        }
    for(int i=1;i<=m;i++)
    {   int x;
        scanf("%d ",&x);
        if(x==0)
        {
            int y,z;
            scanf("%d %d ",&y,&z);
                a[y]+=z;
                update(y,z);
        }
        else if(x==1)
        {
            int y,z;
            scanf("%d %d",&y,&z);
            printf("%d\n",suma(z)-suma(y-1));
        }
        else if(x==2)
        {
            int y;
            scanf("%d ",&y);
        }
    }
}
int suma(int y)
{  int aux=0;
   for(int i=y;i>=1;i-=zero(i))
   {
       aux+=aib[i];
   }
   return aux;
}
int main()
{
    freopen("aib.in","r",stdin);
    //freopen("aib.out","w",stdout);
    citire();
    return 0;
}