Cod sursa(job #1520396)

Utilizator danstefanDamian Dan Stefan danstefan Data 8 noiembrie 2015 17:54:56
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define UB(x) (x&(-x))
using namespace std;
int n,m,i,x,aib[100010],pi,ps,p,va,su,in;
char ce;
void Add(int poz,int val)
{
    int i;
    for(i=poz; i<=n; i+=UB(i))
        aib[i]+=val;
}
int Suma(int a,int b)
{
    int i,s1=0,s2=0;
    for(i=a-1; i>0; i-=UB(i))
        s1+=aib[i];
    for(i=b; i>0; i-=UB(i))
        s2+=aib[i];
    return s2-s1;
}
int main()
{
    freopen("aib.in","r",stdin);
    ofstream g ("aib.out");
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; ++i)
    {
        scanf("%d",&x);
        Add(i,x);
    }
    for(i=1; i<=m; ++i)
    {
        scanf("\n");
        scanf("%c",&ce);
        if(ce=='0')
        {
            scanf("%d%d",&p,&va);
            Add(p,va);
        }
        else if(ce=='1')
        {
            scanf("%d%d",&pi,&ps);
            g<<Suma(pi,ps)<<'\n';
        }
        else
        {
            scanf("%d",&su);
            for(in=1; in<=n; ++in)
                if(aib[in]==su)
                {
                    g<<in<<'\n';
                    break;
                }
        }}
        return 0;
    }