Cod sursa(job #1292654)

Utilizator bulbulicaAlexandrescu Cristian bulbulica Data 14 decembrie 2014 16:27:24
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#define N 100010
using namespace std;

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

int v[N],a,b,c,L,R,M,n,m;

int query(int i)
{
    int ret=0;
    for(;i;i-=i& (-i))
        ret+=v[i];
    return ret;
}

void upd(int i,int val)
{
    for(;i<=n;i+=i&(-i))
        v[i]+=val;
 
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>a;
        upd(i,a);
    }
    for(;m;m--)
    {
        fin>>c;
        if(c==0)
        {
            fin>>a>>b;
            upd(a,b);
            continue;
        }
        if(c==1)
        {
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<'\n';
            continue;
        }
        fin>>a;
        if(a>query(n))
        {
            fout<<"-1\n";
            continue;
        }
        for(L=0,R=n;R-L>1;)
        {
            M=(L+R)/2;
            if(query(M)<a)
                L=M;
            else
                R=M;
        }
        if(query(R)==a)
            fout<<R<<"\n";
        else
            fout<<"-1\n";
 
    }
    return 0;
}