Cod sursa(job #2803721)

Utilizator Andy_ANDYSlatinaru Andrei Alexandru Andy_ANDY Data 20 noiembrie 2021 13:03:49
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define ll long long
//#define int ll
using namespace std;

ifstream f("aib.in");
ofstream g("aib.out");


int n,q,arb[100005];

void update(int poz,int x)
{
    for(int i=poz;i<=n;i+=(i&(-i)))
    {
        arb[i]+=x;
    }
}
int query(int poz)
{   int ans=0;
    for(int i=poz;i>0;i-=(i&(-i)))
    {
        ans+=arb[i];
    }
    return ans;
}


int main()
{
    f>>n>>q;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        update(i,x);
    }

    for(;q--;)
    {
        int op;
        f>>op;

        if(op==0)
        {
            int a,b;
            f>>a>>b;
            update(a,b);
        }
        else if(op==1)
        {
            int a,b;
            f>>a>>b;
            g<< query(b)-query(a-1)<<'\n';
        }
        else if(op==2)
        {
            int x;
            f>>x;
            int st=1,dr=n;
            while(st<dr)
            {
                int mij=(st+dr)/2;

                if(query(mij)<x)
                {
                    st=mij+1;
                }
                else
                {
                    dr=mij;
                }
            }
            if(query(st)==x) g<<st<<'\n';
            else g<< "-1\n";
        }

    }





    return 0;

}