Cod sursa(job #1542343)

Utilizator vLaDy198Bocean Vlad vLaDy198 Data 5 decembrie 2015 12:18:24
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include<fstream>

using namespace std;
ifstream fi("aib.in");
ofstream fo("aib.out");
int n,m,v,AIB[100001];
int lsb(int i)
{
    return i-(i&(i-1));///i&(-i)
}
int query(int p)
{
    int s=0,i;
    for(i=p;i>=1;i-=lsb(i))
        s+=AIB[i];
    return s;
}
void update(int p,int x)
{
    int i;
    for(i=p;i<=n;i+=lsb(i))
        AIB[i]+=x;
}void aib(int p,int x)
{
    int i;
    for(i=p;i<=n;i+=lsb(i))
        AIB[i]+=x;
}
int pozitie(int a)
{
    for(int i=1;i<=n;i++)
        if(query(i)==a)
            return i;
    return -1;
}
int main()
{fi>>n>>m;
int op,a,b;
for(int i=1;i<=n;i++)
    {fi>>v;
     aib(i,v);
    }
for(int i=1;i<=m;i++)
    {fi>>op;
        if(op==0)
        {
            fi>>a>>b;
            update(a,b);
        }
        if(op==1)
        {
            fi>>a>>b;
            fo<<query(b)-query(a-1)<<'\n';
        }
        if(op==2)
        {
            fi>>a;
            fo<<pozitie(a)<<'\n';
        }
    }
    return 0;
}