Cod sursa(job #2772843)

Utilizator andreitabaraandrei2004 andreitabara Data 3 septembrie 2021 00:00:55
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
long long a,b,c,n,m,i,x,aib[200000];
void up(int p,int x)
{
    for(long i=p;i<=n;i+=(i&(-i)))
    {
        aib[i]+=x;
    }
}
long long  sum(long long p)
{
    long long s=0;
    for(long i=p;i>=1;i-=(i&(-i)))
    {
        s+=aib[i];
    }
    return s;
}
int main()
{

in>>n>>m;
for(i=1;i<=n;i++)
{
    in>>x;
    up(i,x);
}
for(i=1;i<=m;i++)
{
    in>>a>>b;
    if(a==0)
    {in>>c;
        up(b,c);
    }
    else
    {
        if(a==1)
        {in>>c;
            long long s1=0;
            s1=sum(c)-sum(b-1);
            out<<s1<<'\n';
        }
        else
        {
            long long st=1;
            long long dr=n;
            long long mid=0;
            int ok=0;
            while(st<=dr)
            {
                mid=(st+dr)/2;
                long long nr=sum(mid);
                if(nr==b){ok=1;out<<mid<<'\n';break;}
                if(nr>b)dr=mid-1;
                if(nr<b)st=mid+1;
            }
            if(ok==0)out<<-1<<'\n';
        }
    }
}
    return 0;
}