Cod sursa(job #2772840)

Utilizator andreitabaraandrei2004 andreitabara Data 2 septembrie 2021 23:51:35
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 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(int i=p;i<=n;i+=i&(-i))
    {
        aib[i]+=x;
    }
}
long long  sum(long long p)
{
    long long 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
        {
            long long st=1;
            long long dr=n;
            long long 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;
}