Cod sursa(job #1542342)

Utilizator feli2felicia iuga feli2 Data 5 decembrie 2015 12:17:57
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");

int n, aib[100000], a, b, x, i, m, q;

int query(int p)
{
    int s=0,i;
    for(i=p;i>=1;i-=i&(-i))
        s+=aib[i];
    return s;
}

void update(int p, int x)
{
    int i;
    for(i=p;i<=n;i+=i&(-i))
        aib[i]+=x;
}

int q2(int a)
{
    int lo=1, hi=n, s, m;
    while(lo<=hi)
    {
        m=(lo+hi)/2;
        s=query(m);
        if(s==a)
            return m;
        if(s<a)
            lo=m+1;
        if(s>a)
            hi=m-1;
    }
    return -1;
}

int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        update(i,x);
    }
    for(i=1;i<=m;i++)
    {
        fin>>q;
        if(q==0)
        {
            fin>>a>>b;
            update(a,b);
        }
        if(q==1)
        {
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<'\n';
        }
        if(q==2)
        {
            fin>>a;
            fout<<q2(a)<<'\n';
        }
    }
    return 0;
}