Cod sursa(job #2665675)

Utilizator andreitabaraandrei2004 andreitabara Data 31 octombrie 2020 10:56:28
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
long aib[100001],x,i,c,a,b,n,m,j,st,dr,ok,mid,y;
void adun (long b, long a)
{
    long i;
    for(i=b;i<=n;i+=(i&(-i)))
    {
        aib[i]+=a;
    }
}
long suma (long k)
{
    long i,s=0;
    for(i=k;i>=1;i-=(i&(-i)))
    {
        s+=aib[i];
    }
    return s;
}
long cbin (long st, long dr,long a)
{
    long mid;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(suma(mid)==a)return mid;
        if(suma(mid)>a)dr=mid-1;
        if(suma(mid)<a)st=mid+1;

    }
    return 0;
}
int main()
{
   in>>n>>m;
   for(i=1;i<=n;i++)
   {
       in>>x;
       adun(i,x);

   }
for(i=1;i<=m;i++)
{
    in>>c>>x;
    if(c==0)
    {
        in>>y;
        adun(x,y);
    }
    else
    {
        if(c==1)
        {
            in>>b;
            out<<suma(b)-suma(x-1)<<'\n';
        }
        else
        {
          ok=cbin(1,n,x);
          if(ok>0)out<<ok<<'\n';
          else{
            out<<-1<<'\n';
          }
        }
    }
}
    return 0;
}