Cod sursa(job #2681052)

Utilizator luchiancristianLuchian Cristian luchiancristian Data 4 decembrie 2020 20:39:23
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
long long n,m,x,v[100010],a,b;
long long suma(long long poz)
{
    long long r=0;
    for(;poz>=1;poz-=poz&(-poz))
        r+=v[poz];
    return r;
}
void adn(long long a,long long b)
{
    for(;a<=n;a+=a&(-a))
        v[a]+=b;
    return;
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;++i)
    {
        in>>x;
        v[i]=x+suma(i-1)-suma(i-(i&(-i)));
    }
    for(int y=1;y<=m;++y)
    {
        in>>x;
        if(x==0)
        {
            in>>a>>b;
            adn(a,b);
        }
        if(x==1)
        {
            in>>a>>b;
            out<<suma(b)-suma(a-1)<<'\n';
        }
        if(x==2)
        {
            in>>a;
            long long b=1,e=n,m;
            while(b<=e)
            {
                m=(b+e)/2;
                if(suma(m)>=a)
                    e=m-1;
                else
                    b=m+1;
            }
            if(suma(b)==a)
                out<<b<<'\n';
            else
                out<<-1<<'\n';
        }
    }
    return 0;
}