Cod sursa(job #1259661)

Utilizator seby5381Marinescu Sebastian seby5381 Data 10 noiembrie 2014 12:39:31
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#define LSB(x) (x&(-x))
int i,n,m,poz1,poz2,a[100005],q,poz,val,ii,j,x;

void update(int poz, int val)
{
    for(i=poz;i<=n;i+=LSB(i))
    {
        a[i]+=val;
    }
}

int query(int poz)
{
    int s=0;
    for(i=poz;i>=1;i-=LSB(i))
    {
        s+=a[i];
    }
    return s;
}

int main()
{
    freopen("aib.in","r",stdin);
    freopen("aib.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(ii=1;ii<=n;ii++)
    {
        scanf("%d",&x);
        update(ii,x);
    }
    for(ii=1;ii<=m;ii++)
    {
        scanf("%d%d",&q,&poz);
        if(q==0)
        {
            scanf("%d",&val);
            update(poz,val);
        }
        else if(q==1)
        {
            scanf("%d",&poz2);
            printf("%d\n",query(poz2)-query(poz-1));
        }
        else
        {
            for(j=1;j<=n;j+=LSB(j))
            {
                if(query(j)==poz)
                {
                    printf("%d\n",j);
                    break;
                }
            }
        }
    }
    return 0;
}