Cod sursa(job #2952873)

Utilizator RaduDumitriuDumitriu Radu RaduDumitriu Data 10 decembrie 2022 09:51:39
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
#define ub(x) (x&(-x))

int add(int aib[],int i,int val,int n)
{
    for (i ; i<=n;i+=ub(i))
    {
        aib[i]+=val;
    }
}
int sum(int aib[],int poz){
    int sum=0;
    for (int i=poz;i>0;i-=ub(i))
    {
        sum+=aib[i];
    }
}
int sum2(int aib[],int poz1,int poz2)
{
    int ans=sum(aib,poz2)-sum(aib,poz1-1);
}
int cb(int aib[],int s,int lun)
{
    int l=1;
    int r=lun;
    while (r>=l)
    {
        int mid=(r+l)/2;
        if (sum(aib,mid)>s)
        {
            r=mid-1;
        }
        else if (sum(aib,mid)==s)
        {
            return mid;
        }
        else l=mid+1;
    }
}

int main()
{
    int n,nq,q,a,b;
    in>>n;
    int aib[n];
    for (int i=1;i<=n;i++)
    {
        aib[i]=0;
    }
    for(int i=1;i<=n;i++)
    {
        cin >> aib[i];
    }
    in >>nq;
    while (nq--)
    {
        in>>q;
        if (q==0)
        {
            in>>a>>b;
            add(aib,a,b,n);
        }
        if (q==1)
        {
            in>>a>>b;
            out << sum2(aib,a,b);
        }
        else
        {
            in >> a;
            out << cb(aib,a,n);
        }
        out <<"\n";
    }
}