Cod sursa(job #1535853)

Utilizator Andrei121Andrei Ghigheci Andrei121 Data 25 noiembrie 2015 12:00:39
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

using namespace std;
int aib[100001]  , v[100001],n;
int query(int p)
{
    int s=0;
    while(p!=0)
    {
        s+=aib[p];
        p-=(p&-p);
    }
    return s;
}
void update(int p , int val)
{
    while(p<=n)
    {
        aib[p]+=val;
        p+=(p&-p);
    }
}
int bin(int val)
{
    int i,pas;
    i=0;
    pas=1<<16;
    while(pas!=0)
    {
        if(i+pas<=n&&aib[i+pas]<=val)
        {
            i+=pas;
            val-=aib[i];
        }
        pas/=2;
    }
    return i;
}
ifstream in ("aib.in");
ofstream out ("aib.out");

int main()
{
    int i , m ,poz=0 , val=0  , tip ;
    in >> n >> m;
    for(i=1; i<=n; i++)
    {
        in >> v[i];
        update(v[i] , i);
    }
    for(i=1; i<=m; i++)
    {
        in >> tip ;
        if(tip==0)
        {
            in >> poz >> val;
            update(poz , val);
            out << '\n';
        }
        if(tip == 1)
        {
            in >> poz >> val;
            out << query(val)-query(poz-1) << '\n';
        }
        if(tip==2)
        {
            in >> val;
            out << bin(val) << '\n';
        }
    }
    return 0;
}