Cod sursa(job #2772839)

Utilizator andreitabaraandrei2004 andreitabara Data 2 septembrie 2021 23:49:59
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
long long a,b,c,n,m,i,x,aib[10000];
void up(int p,int x)
{
    for(int i=p;i<=n;i+=i&(-i))
    {
        aib[i]+=x;
    }
}
long sum(long p)
{
    int s=0;
    for(int 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;
            int s1=0;
            s1=sum(c)-sum(b-1);
            out<<s1<<'\n';
        }
        else
        {
            int st=1;
            int dr=n;
            int mid;
            while(st<=dr)
            {
                mid=(st+dr)/2;
                int nr=sum(mid);
                if(nr==b){out<<mid<<'\n';break;}
                if(nr>b)dr=mid-1;
                if(nr<b)st=mid+1;
            }
        }
    }
}
    return 0;
}