Cod sursa(job #3360827)

Utilizator Tudor_ChelaruChelaru Tudor Tudor_Chelaru Data 17 iulie 2026 09:56:55
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int n,m,i,v[100005],t,x,y,aib[100005],st,dr,mij,ras,ok=0;
void update(int poz,int val)
{
    int i;
    for(i=poz;i<=n;i+=(i&-i))
        aib[i]+=val;
}
int query(int a,int b)
{
    int s1=0,s2=0,i;
    for(i=a-1;i>=1;i-=(i&-i))
        s1+=aib[i];
    for(i=b;i>=1;i-=(i&-i))
        s2+=aib[i];
    return s2-s1;
}
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
        cin>>v[i];
    for(i=1;i<=n;i++)
        update(i,v[i]);
    for(i=1;i<=m;i++)
    {
        cin>>t>>x;
        if(t==0)
        {
            cin>>y;
            update(x,y);
        }
        else if(t==1)
        {
            cin>>y;
            cout<<query(x,y)<<'\n';
        }
        else
        {
            ok=0;
            st=1;
            dr=n;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(query(1,mij)>x)
                    dr=mij-1;
                else if(query(1,mij)<x)
                    st=mij+1;
                else
                {
                    ras=mij;
                    ok=1;
                    break;
                }
            }
            if(ok==1)
                cout<<ras<<'\n';
            else
                cout<<-1<<'\n';
        }
    }
    return 0;
}